Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python无法打开ZipFile_Python_Python 3.x - Fatal编程技术网

python无法打开ZipFile

python无法打开ZipFile,python,python-3.x,Python,Python 3.x,我有一套*.tar.xz档案。它们中的每一个都可能包含APK或JAR文件,这些文件实际上是zip归档文件。我试图在zip档案的内容中搜索一些模式。我使用下一个代码来完成它: #! /usr/bin/env python3 import os import glob import tarfile import shutil import zipfile def check(filename): if 'my_awesome_pattern' in open(file).read():

我有一套
*.tar.xz
档案。它们中的每一个都可能包含APK或JAR文件,这些文件实际上是zip归档文件。我试图在zip档案的内容中搜索一些模式。我使用下一个代码来完成它:

#! /usr/bin/env python3

import os
import glob
import tarfile
import shutil
import zipfile

def check(filename):
    if 'my_awesome_pattern' in open(file).read():
        print('matches')

def process_zip(f):
    z = zipfile.ZipFile(f, 'r')     # <- here problem occurs
    z.extractall('tmp')
    z.close()  

def process_jar(file):
    print('JAR')
    process_zip(file)

def process_apk(file):
    print('APK')
    process_zip(file)

def process_xml(file):
    print('XML')
    check(file)

def process_tar(filename):
    print(filename)
    tar = tarfile.open(filename)
    for entry in tar.getnames():
        print(">>> " + entry)
        if entry.endswith('xml'):
            tar.extract(entry)
            process_xml(entry)
            os.remove(entry)
        elif entry.endswith('jar'):
            tar.extract(entry)
            process_jar(entry)
            os.remove(entry)
        elif entry.endswith('apk'):
            tar.extract(entry)
            process_apk(entry)
            os.remove(entry)

    tar.close()


for file in glob.glob("*.tar.xz"):
    process_tar(file)
#/usr/bin/env蟒蛇3
导入操作系统
导入glob
导入tarfile
进口舒蒂尔
进口拉链
def检查(文件名):
如果打开(文件).read()中的“我的模式”:
打印('匹配')
def过程压缩(f):
z=zipfile.zipfile(f,'r')#>>setupwizardtablet all
>>>设置向导Tablet all/nodpi
>>>设置向导Tablet all/NodePI/priv应用程序
>>>SetupWizard平板电脑全部/nodpi/priv应用程序/SetupWizard
>>>SetupWizard tablet all/nodpi/priv app/SetupWizard/SetupWizard.apk
APK
回溯(最近一次呼叫最后一次):
文件“/scan.py”,第56行,在
进程(文件)
文件“/scan.py”,第49行,处理中
流程apk(输入)
文件“/scan.py”,第27行,处理中
进程压缩(文件)
文件“/scan.py”,第16行,进程中

z=zipfile.zipfile(f,'r')#Python不是我喜欢的,所以我正在寻求帮助。也许是related@dhkePython是自动化我的任务的最合适的工具。而且APK似乎还可以。至少
解压
在没有任何警告的情况下解压。@MachineLearning是的,我想这是我的情况。由于我使用的是Python 3.4.0,所以不应该出现这种情况。谢谢链接@Serhio因此,解决方案可能是升级到较新的Python版本,或者手动引入本地
zipfile
模块。谷歌创建符合标准的zip文件;-)我不喜欢蟒蛇,所以我在寻求帮助。也许是related@dhkePython是自动化我的任务的最合适的工具。而且APK似乎还可以。至少
解压
在没有任何警告的情况下解压。@MachineLearning是的,我想这是我的情况。由于我使用的是Python 3.4.0,所以不应该出现这种情况。谢谢链接@Serhio因此,解决方案可能是升级到较新的Python版本,或者手动引入本地
zipfile
模块。谷歌创建符合标准的zip文件;-)
setupwizardtablet-all.tar.xz
>>> setupwizardtablet-all
>>> setupwizardtablet-all/nodpi
>>> setupwizardtablet-all/nodpi/priv-app
>>> setupwizardtablet-all/nodpi/priv-app/SetupWizard
>>> setupwizardtablet-all/nodpi/priv-app/SetupWizard/SetupWizard.apk
APK
Traceback (most recent call last):
  File "./scan.py", line 56, in <module>
    process_tar(file)
  File "./scan.py", line 49, in process_tar
    process_apk(entry)
  File "./scan.py", line 27, in process_apk
    process_zip(file)
  File "./scan.py", line 16, in process_zip
    z = zipfile.ZipFile(f, 'r')     # <- here problem occurs
  File "/usr/lib/python3.4/zipfile.py", line 937, in __init__
    self._RealGetContents()
  File "/usr/lib/python3.4/zipfile.py", line 1034, in _RealGetContents
    x._decodeExtra()
  File "/usr/lib/python3.4/zipfile.py", line 415, in _decodeExtra
    tp, ln = unpack('<HH', extra[:4])
struct.error: unpack requires a bytes object of length 4