使用带 Python 的 Zipfile 获取正确的目录结构
Getting the correct directory structure using Zipfile with Python
我有一个类似 /level1/level2/level3/level4/level5
的目录结构,在 level5 中我有 .json 文件,我想用压缩版本替换,所以从
/level1/level2/level3/level4/level5/{file1.json, file2.json, file3.json}
至
/level1/level2/level3/level4/level5/{file1.zip, file2.zip, file3.zip}
但是我的代码在脚本所在的文件夹中生成了 zip 文件,即级别 3,导致 /level1/level2/[level3]{file1.zip, file2.zip, file3.zip}/level4/level5/{file1.json, file2.json, file3.json}
此外,如果我解压缩文件,我会得到整个目录结构,而不仅仅是文件。例如,如果我解压缩 file1.zip 我得到 /level1/level2/[level3]{(/level1/level2/level3/level4/level5/file1.json), file2.zip, file3.zip}/level4/level5/{file1.json, file2.json, file3.json}
我尝试了不同的论据,但不确定如何获得我想要的结果。我怎样才能做到这一点?
这是我目前的代码
path = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
level4, level5)
for root, dirs, files in os.walk(path, topdown=True):
print('This is root: ', root)
for file in files:
zf = zipfile.ZipFile(
'{}.zip'.format(file[:-5]), 'w',
zipfile.ZIP_DEFLATED)
zf.write(os.path.join(root, file))
zf.close()
您应该创建包含根路径的 zip 文件,以便在 JSON 文件所在的位置创建 zip 文件,并且在将 JSON 文件写入 zip 文件时,使用writestr
方法而不是 write
以便您可以使用所需的路径名命名文件,在这种情况下,它只是没有路径名的文件名:
for root, dirs, files in os.walk(path, topdown=True):
print('This is root: ', root)
for file in files:
zf = zipfile.ZipFile(os.path.join(root, '{}.zip'.format(file[:-5])), 'w', zipfile.ZIP_DEFLATED)
zf.writestr(file, open(os.path.join(root, file)).read())
zf.close()
我有一个类似 /level1/level2/level3/level4/level5
的目录结构,在 level5 中我有 .json 文件,我想用压缩版本替换,所以从
/level1/level2/level3/level4/level5/{file1.json, file2.json, file3.json}
至
/level1/level2/level3/level4/level5/{file1.zip, file2.zip, file3.zip}
但是我的代码在脚本所在的文件夹中生成了 zip 文件,即级别 3,导致 /level1/level2/[level3]{file1.zip, file2.zip, file3.zip}/level4/level5/{file1.json, file2.json, file3.json}
此外,如果我解压缩文件,我会得到整个目录结构,而不仅仅是文件。例如,如果我解压缩 file1.zip 我得到 /level1/level2/[level3]{(/level1/level2/level3/level4/level5/file1.json), file2.zip, file3.zip}/level4/level5/{file1.json, file2.json, file3.json}
我尝试了不同的论据,但不确定如何获得我想要的结果。我怎样才能做到这一点?
这是我目前的代码
path = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
level4, level5)
for root, dirs, files in os.walk(path, topdown=True):
print('This is root: ', root)
for file in files:
zf = zipfile.ZipFile(
'{}.zip'.format(file[:-5]), 'w',
zipfile.ZIP_DEFLATED)
zf.write(os.path.join(root, file))
zf.close()
您应该创建包含根路径的 zip 文件,以便在 JSON 文件所在的位置创建 zip 文件,并且在将 JSON 文件写入 zip 文件时,使用writestr
方法而不是 write
以便您可以使用所需的路径名命名文件,在这种情况下,它只是没有路径名的文件名:
for root, dirs, files in os.walk(path, topdown=True):
print('This is root: ', root)
for file in files:
zf = zipfile.ZipFile(os.path.join(root, '{}.zip'.format(file[:-5])), 'w', zipfile.ZIP_DEFLATED)
zf.writestr(file, open(os.path.join(root, file)).read())
zf.close()