提取一些zip文件的Python错误
问题描述:
我编写了一个小应用程序,该应用程序通过链接提供一个zip文件(具有不同的扩展名),并将文件提取到重命名的文件夹。 出于某种原因,它为我的一些zip文件工作,但不是为他们所有。提取一些zip文件的Python错误
我得到一个:
Traceback (most recent call last):
File "download_unzip.py", line 48, in <module>
main()
File "download_unzip.py", line 42, in main
shutil.move(unzip_file(temp_kmz),'temp_extracted/')
File "download_unzip.py", line 26, in unzip_file
fd = open(name, 'w')
IOError: [Errno 2] No such file or directory: 'models/model.dae'
我的代码是:
import sys , urllib , zipfile , os.path , argparse , shutil
parser = argparse.ArgumentParser(description="Download and Unzip")
parser.add_argument('url', help='The action to take (e.g. install, remove, etc.)')
args = parser.parse_args()
print args.url
url = args.url
temp_kmz="temp_kmz"
def unzip_file(path):
zfile = zipfile.ZipFile(path)
extracted_filename = zfile.infolist()[0].filename[:-1]
for name in zfile.namelist():
(dirname, filename) = os.path.split(name)
#print "Decompressing " + filename + " on " + dirname
if filename == '':
# directory
if not os.path.exists(dirname):
os.mkdir(dirname)
else:
# file
fd = open(name, 'w')
fd.write(zfile.read(name))
fd.close()
zfile.close()
return extracted_filename
def download_file():
urllib.urlretrieve (url, temp_kmz)
return True
def main():
if (download_file()):
print "Now deleting temp..."
shutil.rmtree('temp_extracted/')
print "unzipping.. and renaming folder"
shutil.move(unzip_file(temp_kmz),'temp_extracted/')
print "Finished!!"
else:
print "Error downloading file"
main()
我的工作下载的文件:
蟒蛇download_unzip.py “http://dl.dropbox.com/u/2971439/dae.kmz”
不工作的一个:
蟒蛇download_unzip.py “http://dl.dropbox.com/u/2971439/rally_car_youbeq.kmz”
请注意,这两个文件与我的OS提取正常(Ubuntu的)
答
固定我的问题随着一些重码变化:
import urllib2 ,argparse, shutil, urlparse , os , zipfile, os.path
from zipfile import ZipFile as zip
parser = argparse.ArgumentParser(description="Download and Unzip")
parser.add_argument('url', help='The action to take (e.g. install, remove, etc.)')
args = parser.parse_args()
print args.url
url = args.url
temp_kmz="temp_kmz"
def extractAll(zipName):
z = zip(zipName)
for f in z.namelist():
if f.endswith('/'):
os.makedirs(f)
else:
z.extract(f)
def download(url, fileName=None):
def getFileName(url,openUrl):
if 'Content-Disposition' in openUrl.info():
# If the response has Content-Disposition, try to get filename from it
cd = dict(map(
lambda x: x.strip().split('=') if '=' in x else (x.strip(),''),
openUrl.info()['Content-Disposition'].split(';')))
if 'filename' in cd:
filename = cd['filename'].strip("\"'")
if filename: return filename
# if no filename was found above, parse it out of the final URL.
return os.path.basename(urlparse.urlsplit(openUrl.url)[2])
r = urllib2.urlopen(urllib2.Request(url))
try:
fileName = fileName or getFileName(url,r)
with open(fileName, 'wb') as f:
shutil.copyfileobj(r,f)
finally:
r.close()
def main():
download(url,temp_kmz)
extractAll(temp_kmz)
main()
我看到很多东西g与你的代码。对于初学者来说,'unzip_file()'函数传递给zip档案文件名并尝试从其中提取_all_文件,但是只返回第一个文件的名字和最后一个字符被删除(所以它是无效的,这将导致以下'shutil.move()'调用失败)。另外,请不要只说一些“不起作用”的东西。至少详细描述你的问题中发生的任何回溯。基本的想法是帮助我们帮助你。 – martineau 2013-02-23 00:17:41
我拿出最后一个字符,因为它是“/”,我认为最好删除它。反正它不起作用,即使我离开它。关于回溯,如果你看到代码的第一部分,你会看到它的;) – psychok7 2013-02-25 09:57:35
我只是解压缩文件,并使用路径来阅读文件夹,如果你需要帮助路径点击这里>>> http: //*.com/questions/3701646/how-to-add-to-the-pythonpath-in-windows-7 Jordanian 2013-12-17 19:30:01