尝试使用python 3中的zipfile
模块创建zip文件时出现小问题。
我有一个包含xml文件的目录,我希望从同一目录中的所有这些文件创建一个zip存档,但是遇到错误FileNotFoundError: [Errno 2] no such file or directory: 'file.xml'
脚本:
import datetime
import os
import zipfile
path = '/Users/xxxx/reports/xxxx/monthly'
month = datetime.datetime.now().strftime('%G'+'-'+'%B')
zf = os.path.join(path, '{}.zip'.format(month))
z = zipfile.ZipFile(zf, 'w')
for i in os.listdir(path):
if i.endswith('.xml'):
z.write(i)
z.close()
似乎在调用z.write(i)
时,它正在工作目录中查找xml文件,但工作目录是/Users/xxxx/scripts
,其中包含python脚本。
如果可能的话,如何在不更改当前工作目录的情况下让z.write(i)
查看path
变量。
答案 0 :(得分:1)
实际发生的是,当您浏览
os.listdir(path)
时,i
本身只是FileName
,其中不包含文件的真实Path
。有几种方法可以解决这个问题;最简单的(但最粗略的)如下所示:
import datetime
import os
import zipfile
path = '/Users/xxxx/reports/xxxx/monthly'
month = datetime.datetime.now().strftime('%G'+'-'+'%B')
zf = os.path.join(path, '{}.zip'.format(month))
z = zipfile.ZipFile(zf, 'w')
for i in os.listdir(path):
# DECLARE A VARIABLE TO HOLD THE FULL PATH TO THE FILE:
xmlFile = "{}/{}".format(path, i) # <== PATH TO CURRENT FILE UNDER CURSOR
if xmlFile.endswith('.xml'):
z.write(xmlFile)
z.write(filename=xmlFile, arcname="ARCHIVE_NAME_HERE", ) # <== CHANGE
z.close()
希望这有助于。
干杯和好运......
答案 1 :(得分:0)
使用os.chdir移动到文件路径并尝试将文件写入zip。
import datetime
import os
import zipfile
path = '/Users/xxxx/reports/xxxx/monthly'
month = datetime.datetime.now().strftime('%G'+'-'+'%B')
zf = os.path.join(path, '{}.zip'.format(month))
z = zipfile.ZipFile(zf, 'w')
os.chdir(path) #Change DIR
for i in os.listdir(path):
if i.endswith('.xml'):
z.write(i)
z.close()
不改变DIR:
z = zipfile.ZipFile(zf, 'w')
for i in os.listdir(path):
if i.endswith('.xml'):
z.write(os.path.join(path, i))
z.close()