【发布时间】:2015-09-29 13:23:57
【问题描述】:
我想编写一个简单的脚本来遍历文件夹中的所有文件,并将那些已压缩 (.zip) 的文件解压缩到同一个文件夹。对于这个项目,我有一个包含近 100 个压缩 .las 文件的文件夹,我希望有一种简单的方法来批量解压缩它们。我尝试了以下脚本
import os, zipfile
folder = 'D:/GISData/LiDAR/SomeFolder'
extension = ".zip"
for item in os.listdir(folder):
if item.endswith(extension):
zipfile.ZipFile.extract(item)
但是,当我运行脚本时,我收到以下错误:
Traceback (most recent call last):
File "D:/GISData/Tools/MO_Tools/BatchUnzip.py", line 10, in <module>
extract = zipfile.ZipFile.extract(item)
TypeError: unbound method extract() must be called with ZipFile instance as first argument (got str instance instead)
我正在使用 python 2.7.5 解释器。我查看了 zipfile 模块 (https://docs.python.org/2/library/zipfile.html#module-zipfile) 的文档,我想了解我做错了什么。
在我看来,这个过程会是这样的:
- 获取文件夹名称
- 遍历文件夹并找到 zip 文件
- 将 zip 文件解压到文件夹
感谢 Marcus,但是,在实施建议时,我收到另一个错误:
Traceback (most recent call last):
File "D:/GISData/Tools/MO_Tools/BatchUnzip.py", line 12, in <module>
zipfile.ZipFile(item).extract()
File "C:\Python27\ArcGIS10.2\lib\zipfile.py", line 752, in __init__
self.fp = open(file, modeDict[mode])
IOError: [Errno 2] No such file or directory: 'JeffCity_0752.las.zip'
当我使用打印语句时,我可以看到文件在那里。例如:
for item in os.listdir(folder):
if item.endswith(extension):
print os.path.abspath(item)
filename = os.path.basename(item)
print filename
产量:
D:\GISData\Tools\MO_Tools\JeffCity_0752.las.zip
JeffCity_0752.las.zip
D:\GISData\Tools\MO_Tools\JeffCity_0753.las.zip
JeffCity_0753.las.zip
据我了解文档,
zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
打开一个 ZIP 文件,其中 file 可以是文件的路径(字符串)或类似文件的对象
在我看来,一切都存在并得到了解释。我只是不明白我做错了什么。
有什么建议吗?
谢谢
【问题讨论】:
标签: python python-2.7 unzip zipfile arcpy