我正在使用一個 468 MB 的 zip 檔案,其中包含一個檔案,它是一個 CSV 文本檔案。我不想提取整個文本檔案,所以我一次讀取一個二進制塊的 zip 檔案。塊大小大約是 65536 位元組。
我知道我可以使用 Python 的csvfile庫讀取檔案,但在這種情況下,我提供給它的塊不一定會落在行邊界上。
我怎樣才能做到這一點?(ps,我不想使用Pandas)
謝謝。
uj5u.com熱心網友回復:
您只需要執行以下操作:
import zipfile
import io
import csv
with zipfile.ZipFile("test.zip") as zipf:
with zipf.open("test.csv", "r") as f:
reader = csv.reader(io.TextIOWrapper(f, newline='')):
for row in reader:
do_something(row)
假設您有一個 zip 存檔,例如:
jarrivillaga$ unzip -l test.zip
Archive: test.zip
Length Date Time Name
--------- ---------- ----- ----
1308888890 04-01-2022 16:23 test.csv
--------- -------
1308888890 1 file
請注意,zipf.open回傳二進制流,因此您可以使用 anio.TextIOWrapper使其成為文本流,這將與任何csv.reader或csv.DictReader物件一起使用。
默認情況下,這應該以合理大小的塊讀取它,可能是什么io.DEFAULT_BUFFER_SIZE,因為查看zipfile.ZipExtFile它繼承自的源代碼io.BufferedIOBase。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/454723.html
上一篇:不允許使用多個**引數的解決方法
