我试图通过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)