圧縮されたcsvファイルからデータを取得しようとしています。ファイル全体を解凍せずにこれを行う方法はありますか?そうでない場合、ファイルを解凍して効率的に読み取るにはどうすればよいですか?
「zipfile」モジュールを使用してZipを直接インポートしたよpandas dataframe。たとえば、ファイル名が「intfile」で、ZIP内に「THEZIPFILE」という名前だとします。
import pandas as pd
import zipfile
zf = zipfile.ZipFile('C:/Users/Desktop/THEZIPFILE.Zip')
df = pd.read_csv(zf.open('intfile.csv'))
Pandasを使用していない場合は、標準ライブラリで完全に実行できます。Python 3.7コード:
import csv
from io import TextIOWrapper
from zipfile import ZipFile
with ZipFile('yourfile.Zip') as zf:
with zf.open('your_csv_inside_Zip.csv', 'r') as infile:
reader = csv.reader(TextIOWrapper(infile, 'utf-8'))
for row in reader:
# process the CSV here
print(row)
zipfileはwith文もサポートしています。
それでパンダを使用することのyaronの答えに追加してください:
with zipfile.ZipFile('file.Zip') as Zip:
with Zip.open('file.csv') as myZip:
df = pd.read_csv(myZip)
はい。モジュール「zipfile」が必要です
zipfile.ZipInfo([filename[, date_time]])
でZipファイル自体を開きます
次に、ZipFile.infolist()
を使用してZip内の各ファイルを列挙し、ZipFile.open(name[, mode[, pwd]])
で抽出できます。
Modern Pandasバージョン0.18.1以降、圧縮されたcsvファイルをネイティブでサポートしています:そのread_csvメソッドにはcompressionパラメーター:{'infer'、 'gzip'、 'bz2'、 'Zip'、 'xz'、None}、デフォルトは 'infer'。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
最良の答えはYaronだと思いましたが、Zipフォルダー内の複数のファイルを反復処理するコードを追加すると思いました。次に、結果を追加します。
import os
import pandas as pd
import zipfile
curDir = os.getcwd()
zf = zipfile.ZipFile(curDir + '/targetfolder.Zip')
text_files = zf.infolist()
list_ = []
print ("Uncompressing and reading data... ")
for text_file in text_files:
print(text_file.filename)
df = pd.read_csv(zf.open(text_file.filename)
# do df manipulations
list_.append(df)
df = pd.concat(list_)
簡単な解決策は以下のコードを使用することです!
import pandas as pd
#pandas support Zip file reads
df = pd.read_csv("/path/to/file.csv.Zip")