python从7z文件中提取未压缩的数据

python从7z文件中提取未压缩的数据,python,7zip,lzma,Python,7zip,Lzma,我有几个csv文件,其中一些是压缩的,但其他不是,都在一个7z档案。我想读取csv文件并将内容保存在数据库中。但是,每当py7zlib试图从实际未压缩的csv文件中读取数据时,在解压缩过程中就会出现错误data error import os import py7zlib scr = r'Y:\PathtoArchive' z7file = 'ArchiveName.7z' with open(os.path.join(scr,z7file),'rb') as f: archive

我有几个csv文件,其中一些是压缩的,但其他不是,都在一个7z档案。我想读取csv文件并将内容保存在数据库中。但是,每当py7zlib试图从实际未压缩的csv文件中读取数据时,在解压缩过程中就会出现错误
data error

import os
import py7zlib

scr = r'Y:\PathtoArchive'
z7file = 'ArchiveName.7z'

with open(os.path.join(scr,z7file),'rb') as f:
    archive = py7zlib.Archive7z(f)

    names = archive.filenames

    for mem in names:

        obj = archive.getmember(mem)
        print obj.compressed  # prints None for uncompressed data
        try:
            data = obj.read()
        except Exception as er:
            print er          # prints data error during decompression
                              # whenever obj.compressed is None
错误发生在

File "C:\Anaconda\lib\site-packages\py7zlib.py", line 608, in read
data = getattr(self, decoder)(coder, data, level)
File "C:\Anaconda\lib\site-packages\py7zlib.py", line 671, in _read_lzma
return self._read_from_decompressor(coder, dec, input, level, checkremaining=True, with_cache=True)
File "C:\Anaconda\lib\site-packages\py7zlib.py", line 646, in _read_from_decompressor
tmp = decompressor.decompress(data)
ValueError: data error during decompression

那么,如何从7z存档中提取未压缩的数据呢?

虽然我无法真正找出问题所在,但我找到了一种解决方法,解决了从7z存档中的csv文件中获取数据的最终目标。 7-zip附带一个命令行工具。通过子流程模块与该工具通信,我可以自动提取我想要提取的文件,而不会出现任何问题

import subprocess
import py7zlib 

archiveman = r'c:\Program Files\7-zip\7z' # 7z.exe comes with 7-zip
archivepath = r'C:\Path\to\archive.7z'

with open(archivepath,'rb') as f:
    archive = py7zlib.Archive7z(f)
    names = archive.filenames
    for name in names:
        _ = subprocess.check_output([archiveman, 'e', archivepath, '-o{}'.format(r'C:\Destination\of\copy'), name])

可以找到与7z一起使用的不同命令。

虽然我无法真正找出问题所在,但我找到了一种解决方法,解决了最终目标,即从7z存档中的csv文件中获取数据。 7-zip附带一个命令行工具。通过子流程模块与该工具通信,我可以自动提取我想要提取的文件,而不会出现任何问题

import subprocess
import py7zlib 

archiveman = r'c:\Program Files\7-zip\7z' # 7z.exe comes with 7-zip
archivepath = r'C:\Path\to\archive.7z'

with open(archivepath,'rb') as f:
    archive = py7zlib.Archive7z(f)
    names = archive.filenames
    for name in names:
        _ = subprocess.check_output([archiveman, 'e', archivepath, '-o{}'.format(r'C:\Destination\of\copy'), name])

可以找到与7z一起使用的不同命令。

您可以尝试另一个库,它也支持7zip存档压缩、解压缩、加密和解密。

您可以尝试另一个库,它还支持7zip存档压缩、解压缩、加密和解密。

压缩文件是否有密码?否。所有文件都没有密码。压缩文件是否有密码?否。所有文件都没有密码。