14

我已经学习 python 大约 3 周了,我目前正在尝试编写一个小脚本,用于按文件名中出现的关键字和日期对文件(大约 10.000 个)进行排序。应将给定日期之前的文件添加到存档中。排序工作正常,但不是归档

它会创建一个存档 - 名称很好 - 但存档中是文件的完整路径。如果我打开它,它看起来像:folder1 -> folder2 -> folder3 -> files.

如何更改它以使存档仅包含文件而不包含整个结构?

下面是我的 zip 函数的片段,node是文件在排序之前的路径,folder是文件按名称中的关键字排序的子文件items夹,是文件按日期排序的文件夹。

我正在使用 Python 2.6

def ZipFolder(node, zipdate):
    xynode = node + '/xy'
    yznode = node + '/yz'
    for folder in [xynode,yznode]:
        items = os.listdir(folder)
        for item in items:
            itemdate = re.findall('(?<=_)\d\d\d\d-\d\d', item)
            print item
            if itemdate[0] <= zipdate:
                arcname = str(item) + '.zip'
                x = zipfile.ZipFile(folder + '/' + arcname, mode='w', compression = zipfile.ZIP_DEFLATED)
                files = os.listdir(folder + '/' + item)
                for f in files:
                    x.write(folder + '/' + item + '/' + f)
                    print 'writing ' + str(folder + '/' + item + '/' + f) + ' in ' + str(item)
                x.close()
                shutil.rmtree(folder + '/' + item)
    return

我也愿意接受任何建议和改进。

4

1 回答 1

20

从帮助(zipfile):

 |  write(self, filename, arcname=None, compress_type=None)
 |      Put the bytes from filename into the archive under the name
 |      arcname.

所以尝试改变你的 write() 调用:

x.write(folder + '/' + item + '/' + f, arcname = f)

关于你的代码,在我看来已经足够好了,尤其是对于一个 3 周的 Pythonist 来说,尽管一些评论会受到欢迎 ;-)

于 2011-08-10T09:16:53.193 回答