【发布时间】:2015-06-20 17:44:05
【问题描述】:
要重命名我正在下载的 ZipFile 中的一个文件,我执行以下操作:
for item in zipfile.infolist():
old_name = item.filename
match = re.search(r'(.*)(.mdb)', item.filename)
item.filename = "%s_friend%s" % (match.group(1),, match.group(2)) # I should probably be using replace here
zipfile.extract(old_name, save_dir)
但是,当我想提取该文件并将其保存到特定目录时,我需要引用“old_name”而不能引用新的。是否有一种“更清洁”的方式来提取重命名的文件?还是先提取然后重命名文件更pythonic?
就像this SO question的OP一样,我在引用重命名的文件时遇到了同样的错误。
更新:这没有正确更新第一个文件。虽然它似乎正确地重命名了文件,但它输出了最初命名的文件。
for item in zipfile.infolist():
old_name = item.filename
match = re.search(r'(.*)(.mdb)', item.filename)
print match.group(1), match.group(2)
item.filename = "%s_%s%s" % (match.group(1), year, match.group(2))
print item.filename
zipfile.close()
with ZipFile(curr_zip, 'r') as zpf:
for item in zpf.infolist():
zpf.extract(item.filename, save_dir)
【问题讨论】:
-
您要在浏览每个项目时进行提取吗?或者在 for 循环之外,在另一个 for 循环中会好吗?如果是后者,请不要在要重命名文件的同一个 for 循环中提取。而是使用 zipfile.close() 关闭 zipfile 并重新打开它,然后提取文件