Python:如何不带目录将文件放入归档?
我学习Python大约有3周了,现在正在尝试写一个小脚本,用来根据文件名中的关键词和日期对大约10,000个文件进行排序。那些在指定日期之前的文件应该被放到一个归档文件里。排序的部分运行得很好,但归档的部分却有点问题。
归档文件是创建成功了,名字也没问题,但归档里却包含了文件的完整路径。如果我打开它,里面的内容看起来像这样:folder1 -> folder2 -> folder3 -> files
。
我该怎么做才能让归档里只包含文件,而不是整个文件夹结构呢?
下面是我用来压缩文件的代码片段,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
我也欢迎任何建议和改进。
1 个回答
21
来自帮助文档(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周的Python新手来说,不过如果能加一些注释就更好了 ;-)