簡體   English   中英

如何在 python 中打開一個 csv 文件,一次讀取一行,而不將整個 csv 文件加載到內存中?

[英]How can I open a csv file in python, and read one line at a time, without loading the whole csv file in memory?

我有一個大小不適合我機器內存的 csv 文件。 所以我想打開 csv 文件,然后一次讀取它的行。 我基本上想制作一個從csv生成單行的python生成器。

提前致謝! :)

with open(filename, "r") as file:
    for line in file:
        doanything()

只要有可能,Python 就是懶惰的。 文件對象是生成器,不會加載整個文件,而是一次只加載一行。

我個人更喜歡使用csv.DictReader

您將其設置為帶有指針/參數的對象,然后一次訪問文件一行,您只需使用next對其進行迭代,它會返回一個字典,其中包含 csv 文件中的命名字段鍵、值對。

例如

import csv
csvfile = open('names.csv')
my_reader = csv.DictReader(csvfile)

first_row = next(my_reader)

for row in my_reader:
    print ( [(k,v) for k,v in row.items() ] )

csvfile.close()

有關參數使用等信息,請參閱鏈接的文檔 - 這相當簡單。

解決方案:
您可以使用 pandas read_csv 函數中可用的chunksize參數

chunksize = 10 ** 6
for chunk in pd.read_csv(filename, chunksize=chunksize):
    print(type(chunk))
    # CODE HERE

chunksize設置為 1,它應該會處理您的問題陳述。

從 csv 生成單行的 python 生成器。

這聽起來像是您想要來自內置csv模塊的csv.reader 您將獲得文件中每一行的一個列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM