我通过这个脚本读取了大型 CSV 文件(数百万条记录)。如何检测文件是否结束?
import csv
f = open("file.csv", newline='')
csv_reader = csv.reader(f)
while true:
do something with next(csv_reader)[6]
显而易见的解决方案是循环
csv_reader
,如这个答案所建议。如果这不切实际,next
函数的文档会说:
通过调用迭代器的因此为您提供了两种检测结束的方法。
__next__()
方法从迭代器中检索下一个项目。如果给出默认值,则在迭代器耗尽时返回它,否则引发 StopIteration。
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。
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 列并转换为数组
从文档中您已经拥有 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])