web-dev-qa-db-ja.com

pandasでZipファイルに含まれる複数のファイルを読み取る

異なる種類のtxtファイルを含む複数のZipファイルがあります。以下のように:

Zip1 
  - file1.txt
  - file2.txt
  - file3.txt

pandasを使用して、それらのファイルを抽出せずに読み取るにはどうすればよいですか?

Zipごとに1ファイルである場合、read_csvで次のような圧縮方法を使用できます。

df = pd.read_csv(textfile.Zip, compression='Zip') 

これを行う方法についての助けがあれば素晴らしいでしょう。

8
johnnyb

ZipFile.open()pandas.read_csv()に渡して、マルチファイルZipにパックされたcsvファイルからpandas.DataFrameを構築できます。

コード:

pd.read_csv(Zip_file.open('file3.txt'))

すべての.csvを辞書に読み込む例:

from zipfile import ZipFile

Zip_file = ZipFile('textfile.Zip')
dfs = {text_file.filename: pd.read_csv(Zip_file.open(text_file.filename))
       for text_file in Zip_file.infolist()
       if text_file.filename.endswith('.csv')}
20
Stephen Rauch

しばらく前にXMLファイルで同様の問題がありました。 zipfileモジュールはそこに行くことができます。

from zipfile import ZipFile

z = ZipFile(yourfile)

text_files = z.infolist()

for text_file in text_files:
    z.read(text_file.filename)

それらをpandasオブジェクトに連結したい場合、少し複雑になるかもしれませんが、それで始められるはずです。readメソッドはバイトを返すので、それも処理する必要があるかもしれません。

1
Iain Dwyer