2

因此,我正在尝试.jar使用以下代码解压缩文件:它不会解压缩,只有 20 / 500 个文件,并且没有文件夹/图片当我.zip在文件名中输入文件时,也会发生同样的事情。有人有什么建议吗?

import zipfile
zfilename = "PhotoVieuwer.jar"
if zipfile.is_zipfile(zfilename):
    print "%s is a valid zip file" % zfilename
else:
    print "%s is not a valid zip file" % zfilename
print '-'*40

zfile = zipfile.ZipFile( zfilename, "r" )

zfile.printdir()
print '-'*40

for info in zfile.infolist():
    fname = info.filename

    data = zfile.read(fname)


    if fname.endswith(".txt"):
        print "These are the contents of %s:" % fname
        print data


    filename = fname
    fout = open(filename, "w")
    fout.write(data)
    fout.close()
    print "New file created --> %s" % filename
    print '-'*40

但是,它不起作用,它可能会解压缩 500 个文件中的 10 个文件有人可以帮我解决这个问题吗?

已经谢谢了!

我尝试添加 Python 告诉我的内容,我得到了:哎呀!您的修改无法提交,因为:

正文限制为30000 个字符;您输入了 153562 ,只有错误是:

Traceback (most recent call last):
  File "C:\Python27\uc\TeStINGGFDSqAEZ.py", line 26, in <module>
    fout = open(filename, "w")
IOError: [Errno 2] No such file or directory: 'net/minecraft/client/ClientBrandRetriever.class'

解压出来的文件:

amw.Class
amx.Class
amz.Class
ana.Class
ane.Class
anf.Class
ang.Class
ank.Class
anm.Class
ann.Class
ano.Class
anq.Class
anr.Class
anx.Class
any.Class
anz.Class
aob.Class
aoc.Class
aod.Class
aoe.Class
4

2 回答 2

3

此回溯告诉您需要了解的内容:

Traceback (most recent call last):
  File "C:\Python27\uc\TeStINGGFDSqAEZ.py", line 26, in <module>
    fout = open(filename, "w")
IOError: [Errno 2] No such file or directory: 'net/minecraft/client/ClientBrandRetriever.class'

错误消息说文件ClientBrandRetriever.class不存在或目录net/minecraft/client不存在。当打开一个文件用于编写 Python 时,它会创建它,所以文件不存在不会是问题。必须是目录不存在的情况。

考虑到这行得通

>>> open('temp.txt', 'w') 
<open file 'temp.txt', mode 'w' at 0x015FF0D0>

但这并没有,给你得到的几乎相同的回溯:

>>> open('bogus/temp.txt', 'w')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'bogus/temp.txt'

创建目录修复它:

>>> os.makedirs('bogus')
>>> open('bogus/temp.txt', 'w')
<open file 'bogus/temp.txt', mode 'w' at 0x01625D30>

在打开文件之前,您应该检查目录是否存在并在必要时创建它。

所以要解决你的问题,更换这个

fout = open(filename, 'w')

有了这个

head, tail = os.path.split(filename) # isolate directory name
if not os.path.exists(head):         # see if it exists
    os.makedirs(head)                # if not, create it
fout = open(filename, 'w')
于 2012-08-07T17:32:57.040 回答
1

如果python -mzipfile -e PhotoVieuwer.jar dest有效,那么您可以:

import zipfile

with zipfile.ZipFile("PhotoVieuwer.jar") as z:
    z.extractall()
于 2012-08-07T17:36:00.883 回答