小编MJB*_*MJB的帖子

python - 更新 zip 存档时文件重复

我正在尝试更新 zip 存档中的文件并将其另存为新存档。我使用的 zip 存档是一个 Excel.xlsm文件,我需要修改的文件位于子文件夹中:xl/vbaProject.bin。我编写了一个函数(通过修改此处发布的函数:How to update one file inside zip file using python)。

def updateZip2(zip_name, file, data):
    # generate a temp file
    tmp = os.path.splitext(ntpath.basename(zip_name))[0] + '_new.xlsm'
    tmpname = str(pathlib.Path(zip_name).parent.joinpath(tmp))
    print(tmpname)

    with zipfile.ZipFile(zip_name, 'r') as zin:
        with zipfile.ZipFile(tmpname, 'w') as zout:
            zout.comment = zin.comment # preserve the comment
            for item in zin.infolist():
                if item.filename.find(file) == -1:
                    zout.writestr(item, zin.read(item.filename))
Run Code Online (Sandbox Code Playgroud)

当我像这样调用这个函数时: 按预期创建了updateZip2('Book1.xlsm', r'xl\vbaProject.bin', target2) 一个新函数Book1_new.xlsm,但我收到警告:

C:\ProgramData\Anaconda3\lib\zipfile.py:1355: UserWarning: Duplicate name: 'xl/vbaProject.bin'
  return …
Run Code Online (Sandbox Code Playgroud)

python excel zip

5
推荐指数
1
解决办法
3963
查看次数

从整个数据框中删除字符

我需要对熊猫执行的常见操作是从Excel文件中读取表格,然后从所有字段中删除分号。这些列通常是混合数据类型,在尝试执行以下操作时遇到了AtributeError:

for col in cols_to_check:
    df[col] = df[col].map(lambda x: x.replace(';',''))
Run Code Online (Sandbox Code Playgroud)

AttributeError:“ float”对象没有属性“ replace”

当我str()在替换之前将其包装时,Unicode字符有问题,例如

for col in cols_to_check:
    df[col] = df[col].map(lambda x: str(x).replace(';',''))
Run Code Online (Sandbox Code Playgroud)

UnicodeEncodeError:'ascii'编解码器无法在位置3编码字符u'\ xe9':序数不在范围内(128)

在excel中,这是一个非常简单的操作,只需;用一个空字符串替换即可。无论数据类型如何,我如何在整个数据帧中以类似的方式在熊猫中执行此操作?还是我错过了什么?

python string replace pandas

4
推荐指数
1
解决办法
7838
查看次数

pandas - 在DataFrame中搜索字符

我有一个pandas DataFrame(df),我需要搜索分号.我第一次尝试

semicolon_check = df.to_string().__contains__(';'),

但它非常慢,如果是大型DataFrame,我会遇到内存错误.然后我尝试循环遍历列.str,但不是所有列都是字符串,所以每当我到达数字列时,我收到一个错误

AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas

所以我最终得到了这段代码

for col in df.columns: if df[col].dtype == 'O': if df[col].str.contains(r';').any(): print 'found in ' + col

是否有更简单的方法来实现目标?上面的内容虽然按预期工作,但对于像价值搜索这样的基本任务来说似乎有点过分了.

python pandas

3
推荐指数
1
解决办法
2273
查看次数

当实例分配给关系时,sqlalchemy before_flush 事件处理程序看不到外键的变化

我有一个before_flush事件侦听器,用于检查员工的经理是否更改。在这种情况下,会在EmpManHist表中自动创建记录。manager是对Employee表的自引用。这是我的表定义:

class Employee(Base):
    __tablename__ = 'employees'

    emp_id = Column(String, primary_key=True, unique=True)
    name = Column(String, nullable=False)
    manager_id = Column(String, ForeignKey('employees.emp_id'))
    direct_reports = relationship('Employee', backref=backref('manager', remote_side=[emp_id]))
Run Code Online (Sandbox Code Playgroud)

当我通过manager_id直接修改 ForeignKey ( )将新经理分配给员工时,它会被事件侦听器正确拾取。但是当我进行实例分配时,它不会:

# this code does not pick up the manager_id change in the 'before_flush' event listener
emp2.manager = emp3
dal.session.add(emp2)
dal.session.commit()

# this does
emp2.manager_id = '1'
dal.session.add(emp2)
dal.session.commit()
Run Code Online (Sandbox Code Playgroud)

这是为什么?我正在使用 python 3.6.3 和 sqlalchemy 1.1.13

以下是完整的工作示例:

from sqlalchemy import create_engine, Column, Integer, String, …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

3
推荐指数
1
解决办法
2467
查看次数

python正则表达式,用于查找至少包含一个字母的字母数字字符串

我试图弄清楚正则表达式的语法,它将匹配4个字母数字字符,其中至少有一个字母.每个人都应该由包裹:><,但我不希望返回尖括号.

例如,当使用re.findall字符串时,>ABCD<>1234<>ABC1<>ABC2它应该返回['ABCD', 'ABC1'].

1234 - 没有信

ABC2 - 没有用尖括号包裹

python regex python-3.x

2
推荐指数
1
解决办法
765
查看次数

标签 统计

python ×5

pandas ×2

excel ×1

python-3.x ×1

regex ×1

replace ×1

sqlalchemy ×1

string ×1

zip ×1