Errno 22 无效参数 - Zipfile 被跳过
Errno 22 Invalid argument - Zipfile Is Skipped
我正在 Python 中开展一个项目,在该项目中,我从包含日志文件的压缩文件夹中解析数据。该代码适用于大多数 zip,但偶尔会抛出此异常:
[Errno 22] Invalid argument
因此,将跳过整个文件,从而从结果中排除所需日志文件中的数据。当我尝试使用默认的 Windows 实用程序提取压缩文件时,我遇到了这个错误:
Zip error
但是,当我尝试使用 7zip 解压文件时,它成功了,但出现了 2 个错误:
1 <path> Unexpected End of Data
2 Data error: x.csv
x.csv 与我试图解析的日志完全无关,因此,我需要编写具有弹性的代码,即使不相关的文件损坏,它仍然能够解析其他没有的日志。
目前,我正在使用 zipfile 模块将文件解压到内存中。有没有一种可靠的方法可以在不跳过整个文件的情况下执行此操作?
更新 1:我认为我 运行 遇到的错误是 zip 文件缺少页脚。我在十六进制编辑器中查看它时意识到了这一点。我真的不知道如何使用 Python 安全地编辑实际文件。
这是我用来将 zip 提取到内存中的代码:
for zip in os.listdir(directory):
try:
if zip.lower().endswith('.zip'):
if os.path.isfile(directory + "\" + zip):
logs = zipfile.ZipFile(directory + "\" + zip)
for log in logs.namelist():
if log.endswith('log.txt'):
data = logs.read(log)
编辑 2:错误的追溯:
Traceback (most recent call last):
File "c:/Users/xxx/Desktop/Python Porjects/PE/logParse.py", line 28, in parse
logs = zipfile.ZipFile(directory + "\" + zip)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python37\lib\zipfile.py", line 1222, in __init__
self._RealGetContents()
File "C:\Users\xxx\AppData\Local\Programs\Python\Python37\lib\zipfile.py", line 1289, in _RealGetContents
raise BadZipFile("File is not a zip file")
zipfile.BadZipFile: File is not a zip file
堆栈跟踪似乎表明不是您的代码未能成功读取文件,而是 Python 管理 zip 的模块引发了错误。
看起来 python zip 管理器比其他程序更严格(参见 this bug 用户报告 python 行为与其他程序作为 GNOME 存档管理器之间的差异) .
也许,有一个错误报告要做。
我正在 Python 中开展一个项目,在该项目中,我从包含日志文件的压缩文件夹中解析数据。该代码适用于大多数 zip,但偶尔会抛出此异常:
[Errno 22] Invalid argument
因此,将跳过整个文件,从而从结果中排除所需日志文件中的数据。当我尝试使用默认的 Windows 实用程序提取压缩文件时,我遇到了这个错误: Zip error 但是,当我尝试使用 7zip 解压文件时,它成功了,但出现了 2 个错误:
1 <path> Unexpected End of Data
2 Data error: x.csv
x.csv 与我试图解析的日志完全无关,因此,我需要编写具有弹性的代码,即使不相关的文件损坏,它仍然能够解析其他没有的日志。
目前,我正在使用 zipfile 模块将文件解压到内存中。有没有一种可靠的方法可以在不跳过整个文件的情况下执行此操作?
更新 1:我认为我 运行 遇到的错误是 zip 文件缺少页脚。我在十六进制编辑器中查看它时意识到了这一点。我真的不知道如何使用 Python 安全地编辑实际文件。 这是我用来将 zip 提取到内存中的代码:
for zip in os.listdir(directory):
try:
if zip.lower().endswith('.zip'):
if os.path.isfile(directory + "\" + zip):
logs = zipfile.ZipFile(directory + "\" + zip)
for log in logs.namelist():
if log.endswith('log.txt'):
data = logs.read(log)
编辑 2:错误的追溯:
Traceback (most recent call last):
File "c:/Users/xxx/Desktop/Python Porjects/PE/logParse.py", line 28, in parse
logs = zipfile.ZipFile(directory + "\" + zip)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python37\lib\zipfile.py", line 1222, in __init__
self._RealGetContents()
File "C:\Users\xxx\AppData\Local\Programs\Python\Python37\lib\zipfile.py", line 1289, in _RealGetContents
raise BadZipFile("File is not a zip file")
zipfile.BadZipFile: File is not a zip file
堆栈跟踪似乎表明不是您的代码未能成功读取文件,而是 Python 管理 zip 的模块引发了错误。
看起来 python zip 管理器比其他程序更严格(参见 this bug 用户报告 python 行为与其他程序作为 GNOME 存档管理器之间的差异) .
也许,有一个错误报告要做。