【问题标题】:How to zip contents of but not the folder [duplicate]如何压缩文件夹的内容而不是文件夹[重复]
【发布时间】:2020-07-21 02:06:24
【问题描述】:

我正在使用以下文件夹结构:

.
+-- temp
|   +-- sample1.csv
|   +-- sample2.csv
+-- zips
|   +-- zip1.zip
|   +-- zip2.zip
+-- main.py

我想将temp 文件夹的内容压缩成一个压缩文件,但我不想包含该文件夹。我尝试了以下方法(希望只压缩文件):

import pathlib
import zipfile

origin = pathlib.Path('.') / 'temp'
destination = pathlib.Path('.') / 'zips' / 'zip3.zip'

with zipfile.ZipFile(destination, mode='w') as zipfile_:
    for content in origin.iterdir():
        zipfile_.write(content)

我也尝试使用shutil.make_archive(),但它呈现相同的结果,唯一的区别是该目录被简单地命名为"."


编辑:感谢CookieReavermetatoaster(我相信)指出ZipFile.write() 方法有一个名为arcname 的参数,它将命名文件(ZipFile.write() documentation)。

这是我应用修复后的原始问题:

import pathlib
import zipfile

origin = pathlib.Path('.') / 'temp'
destination = pathlib.Path('.') / 'zips' / 'zip3.zip'

with zipfile.ZipFile(destination, mode='w') as zipfile_:
    for content in origin.iterdir():
        zipfile_.write(content, content.name)

【问题讨论】:

    标签: python file directory zipfile pathlib


    【解决方案1】:
    import zipfile
    import os
    
    orig = r"path_to_origin_dir"
    dest = r"path_to_destination_dir"
    
    zip_name = "zip3.zip"
    target_zip = zipfile.ZipFile(os.path.join(dest, zip_name), 'w')
    
    for dp, dn, fn in os.walk(orig):
    
        for filename in fn:
            if filename.endswith('csv'):
                target_zip.write(os.path.join(dp, filename), os.path.relpath(os.path.join(dp, filename), orig))
    
    target_zip.close()
    

    这就是你的目标吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      相关资源
      最近更新 更多