0

さまざまな 7z ファイルに含まれる多数の csv ファイルがあります。これらの 7z ファイルで特定の csv ファイルを見つけて、別のディレクトリに解凍して保存したいと考えています。私が試してみました

import os
import py7zlib

tree = r'Where_the_7zfiles_are_stored'
dst = r'Where_I_want_to_store_the_csvfiles'

for dirpath, dirname, filename in os.walk(tree):
    for myfile in filename:
        if myfile.endswith('2008-01-01_2008-04-30_1.7z'):
            myZip = py7zlib.Archive7z(open(os.path.join(dirpath,myfile), 'rb'))
            csvInZipFile = zip(myZip.filenames,myZip.files)
            for myCsvFileName, myCsvFile in csvInZipFile:
                if '2008-01' in myCsvFileName:
                    with open(os.path.join(dst,myCsvFileName),'wb') as outfile:
                        outfile.write(myCsvFile.read())

しかし、次のエラーが表示されます

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\'\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 682, in runfile
execfile(filename, namespace)
  File "C:\Users\'\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 85, in execfile
    exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)
  File "C:/Users//'/Documents/Example/unzipfiles.py", line 23, in <module>
outfile.write(myCsvFile.read())
  File "C:\Users\'\Anaconda3\lib\site-packages\py7zlib.py", line 576, in read
    data = getattr(self, decoder)(coder, data)
  File "C:\Users\'\Anaconda3\lib\site-packages\py7zlib.py", line 634, in _read_lzma
return self._read_from_decompressor(coder, dec, input, checkremaining=True, with_cache=True)
  File "C:\Users\'\Anaconda3\lib\site-packages\py7zlib.py", line 611, in _read_from_decompressor
    tmp = decompressor.decompress(data)
ValueError: data error during decompression

奇妙なことに、最初の 2 つの csv ファイルではこの方法がうまく機能しているように見えます。問題の根本にたどり着く方法がわかりません。少なくともcsvファイルのデータは変わらないようです。IZArc を使用してさまざまな csv ファイルを手動で解凍しても問題ありません。(この問題は python 2.7 と 3.4 の両方で発生しました)。

lzma モジュールも使用しようとしましたが、7z ファイルに含まれるさまざまな csv ファイルを取得する方法がわかりませんでした。

4

0 に答える 0