Python不能在zipfile.ZipFile中打开绝对路径



我试图通过cwd以外的目录中的一组zip进行解析(然后读取其中的csv文件-这里我不关心这个),使用以下代码:

for name in glob.glob('/Users/brendanmurphy/Documents/chicago-data/16980*.zip'):
    base = os.path.basename(name)
    filename = os.path.splitext(base)[0]
    datadirectory = '/Users/brendanmurphy/Documents/chicago-data/'
    fullpath = ''.join([datadirectory, base])
    csv_file = '.'.join([filename, 'csv'])
    ozid, start, end = filename.split("-")
    zfile = zipfile.ZipFile(fullpath)

但是试图将完整路径传递给zipfile。ZipFile给出了以下完整的回溯:

File "Chicago_csv_reader.py", line 33, in <module>
    zfile = zipfile.ZipFile(fullpath)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 766, in __init__
self._RealGetContents()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 807, in _RealGetContents
raise BadZipfile, "File is not a zip file"
zipfile.BadZipfile: File is not a zip file

将不在cwd中的zip文件的路径传递给ZipFile处理程序的正确方法是什么?

没有正确地连接路径和基名。

不做

filename = os.path.splitext(base)[0]

您正在从文件中剥离.zip扩展名,这意味着您正在指向其他地方。

尝试像这样生成fullpath:

# Use your "base" string, not your "filename" string!
fullpath = os.path.join(datadirectory, base)

然后在您尝试解压缩文件之前进行完整性检查:

if not os.path.exists(fullpath):
    raise Exception("Path '{0}' does not exist!".format(fullpath))
zfile = zipfile.ZipFile(fullpath)

你有几个问题。首先,'name'已经是zip文件名,您不需要对它做任何操作。第二,"。Join ([datadirectory, base])只是附加两个名称并省略路径分隔符。这应该可以工作:

datadirectory = '/Users/brendanmurphy/Documents/chicago-data/'
for name in glob.glob('/Users/brendanmurphy/Documents/chicago-data/16980*.zip'):
    filename = os.path.splitext(base)[0]
    csv_file = os.path.join(datadirectory, filename + '.csv')
    ozid, start, end = filename.split("-")
    zfile = zipfile.ZipFile(name)

最新更新