【发布时间】:2020-11-19 20:16:41
【问题描述】:
如何使这段代码有效? 有一个包含文件夹和 .png 文件的 zip 文件。文件夹“.\icons_by_year”为空。我需要一个一个地获取每个文件而不解压缩它并复制到所选文件夹的根目录(所以没有额外的文件夹)。
class ArrangerOutZip(Arranger):
def __init__(self):
self.base_source_folder = '\\icons.zip'
self.base_output_folder = ".\\icons_by_year"
def proceed(self):
self.create_and_copy()
def create_and_copy(self):
reg_pattern = re.compile('.+\.\w{1,4}$')
f = open(self.base_source_folder, 'rb')
zfile = zipfile.ZipFile(f)
for cont in zfile.namelist():
if reg_pattern.match(cont):
with zfile.open(cont) as file:
shutil.copyfileobj(file, self.base_output_folder)
zfile.close()
f.close()
arranger = ArrangerOutZip()
arranger.proceed()
【问题讨论】:
-
这能回答你的问题吗? How to move a file?
-
@sahasrara62 不幸的是,不是。我知道如何在两个文件夹之间复制文件。这是从 zip 存档文件中一一复制并将它们粘贴到正确创建的文件夹中的任务。可以像在父类中一样创建文件夹,但我找不到从 zip 文件直接复制绕过解压缩的适当解决方案。
-
出了什么问题?有回溯消息吗?
-
问题是
info.filename是压缩文件中的路径,而不是你的文件系统。您只能在 zip 文件打开时复制文件。您可以使用zf.extract甚至shutil.copyfileobj(zf.open("whatever"), other_fp),但由于路径不在您的文件系统上,shutil.copy2肯定会失败。我不确定如何重新排列您的代码以在with open(...) as zf中进行复制,但这就是需要发生的事情。
标签: python-3.x zip zipfile shutil