2016-05-25 12 views
0

いくつかのCSVファイルは圧縮されていますが、他は圧縮されていますが、すべてが7zアーカイブにあります。私はcsvファイルを読んで、その内容をデータベースに保存したいと思います。しかし、実際に圧縮されていないcsvファイルからpy7zlibがデータを読み込もうとすると、エラーdata error during decompressionが返されます。pythonは7zファイルから非圧縮データを抽出します

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-アーカイブからの非圧縮データを抽出することができますか?

+1

圧縮ファイルにパスワードがありますか? –

+0

番号。いずれのファイルにもパスワードがありません。 – user3820991

答えて

1

私は実際に問題がどのようになっているのか分かりませんでしたが、7zアーカイブからCSVファイルからデータを取得する究極の目標を解決する回避策を見つけました。 7-zipにはコマンドラインツールが付属しています。サブプロセスモジュールを介して、そのツールとのコミュニケーション、私は自動的に私が7zので使用できるさまざまなコマンドがhereを見つけることができる何か問題

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]) 

せずに抽出するためにwihsedファイルを抽出することもできます。

関連する問題