【问题标题】:Issue in creating Zip file using glob.glob使用 glob.glob 创建 Zip 文件的问题
【发布时间】:2010-05-24 12:56:43
【问题描述】:

我正在从一个文件夹(和子文件夹)创建一个 Zip 文件。它工作正常并且还创建了一个新的 .zip 文件,但是我在使用 glob.glob 时遇到了问题。它正在读取所需文件夹(源文件夹)中的所有文件并写入新的 zip 文件,但问题是它是添加子目录,而不是从子目录中添加文件。

我给用户一个选项来选择文件名和路径以及文件类型(Zip 或 Tar)。我在创建 .tar.gz 文件时没有遇到任何问题,但是当使用创建 .zip 文件时,就会遇到这个问题。

这是我的代码:

for name in (Source_Dir):
    for name in glob.glob("/path/to/source/dir/*" ):
        myZip.write(name, os.path.basename(name), zipfile.ZIP_DEFLATED)

myZip.close()

另外,如果我使用下面的代码:

for dirpath, dirnames, filenames in os.walk(Source_Dir):
        myZip.write(os.path.join(dirpath, filename) os.path.basename(filename))        

myZip.close()

现在第二个代码获取所有文件,即使它位于文件夹/子文件夹中,创建一个新的 .zip 文件并在没有任何目录结构的情况下写入它。它甚至不需要主文件夹的目录结构,只需将主目录或子目录中的所有文件写入该 .zip 文件。

任何人都可以帮助我或建议我。我更喜欢 glob.glob 而不是使用第二个选项。

提前致谢。

问候, 阿卡什

【问题讨论】:

    标签: glob zipfile


    【解决方案1】:

    Glob 在设计上不会扩展到子目录。它遵循 UNIX 样式路径规则和扩展,请参阅fnmatch 的文档以获取更多信息。如果要访问子目录,则需要将其添加到路径中。此示例将把所有内容都降低一层。

    for name in (Source_Dir):
        for name in glob.glob("/path/to/source/dir/*/*" ):
            myZip.write(name, os.path.basename(name), zipfile.ZIP_DEFLATED)
    
    myZip.close()
    

    Doug Hellman 进行了精彩的讨论 here。如果您没有使用 glob 的模式功能(例如所有文本文件的 *.txt 或扩展名前有数字的所有文本文件的 *[0-9].txt),那么我认为您的 os.walk 解决方案更好

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-10
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 2019-04-02
      相关资源
      最近更新 更多