Python:逐行读取CSV文件,如何检测结束?

问题描述 投票:0回答:4

我通过这个脚本读取了大型 CSV 文件(数百万条记录)。如何检测文件是否结束?

import csv
f = open("file.csv", newline='')
csv_reader = csv.reader(f)

while true:
    do something with next(csv_reader)[6]
python csv
4个回答
0
投票

显而易见的解决方案是循环

csv_reader
,如这个答案所建议。如果这不切实际,next
函数的
文档会说:

通过调用迭代器的

__next__()

 方法从迭代器中检索下一个项目。如果给出默认值,则在迭代器耗尽时返回它,否则引发 StopIteration。

因此为您提供了两种检测结束的方法。


0
投票

csv.reader

将完整读取文件并将其存储在变量中,该变量也是一个
iterable
。要“逐行”阅读,您需要这个:

for row in csv_reader: do something
如果您直接想要最后一行:

with open(‘file_name.csv’,’r’) as file: data = file.readlines() lastRow = data[-1]
这将非常慢并且消耗内存。另一种选择是使用 pandas。


0
投票
我用pandas解决了它:

import pandas as pd import numpy as np csv_reader = pd.read_csv("file.csv", skiprows=2, usecols=[6]) csv_a = csv_reader.to_numpy()
此脚本跳过前 2 行,然后仅导入第 6 列并转换为数组


0
投票
没必要用pandas。

从文档中您已经拥有 csv_reader 中的所有行,因此您可以简单地使用 for 循环进行迭代

import csv f = open("file.csv", newline='') csv_reader = csv.reader(f) for line in csv_reader: do something with line[6]
如果你想跳过标题,只需在循环之前调用 next 即可解决问题(我也想建议对你的代码进行一些小更改)

import csv with open("file.csv", newline='') as f: csv_reader = csv.reader(f) headers = next(csv_reader) for line in csv_reader: do_something_with(line[6])
    
© www.soinside.com 2019 - 2024. All rights reserved.