访问csv文件第N行的最佳方法
我必须访问CSV文件中的第N行。
这是我所做的:
import csv
the_file = open('path', 'r')
reader = csv.reader(the_file)
N = input('What line do you need? > ')
i = 0
for row in reader:
if i == N:
print("This is the line.")
print(row)
break
i += 1
the_file.close()
…但是这并不理想。编辑精度:如果文件很大,我不想遍历所有行,也不需要将整个文件加载到内存中。
我确实希望类似的东西reader[N]
存在,但我没有找到它。
编辑答案:此行(来自所选答案)是我想要的:
next(itertools.islice(csv.reader(f), N, None)
-
它没有什么区别,但是使用起来
enumerate
要比使用自己的计数器变量稍微清洁一些。for i, row in enumerate(reader): if i == N: print("This is the line.") print(row) break
您也可以使用
itertools.islice
针对这种情况设计的方案-访问特定的可迭代切片,而无需将整个内容读入内存。它应该比遍历不需要的行更有效率。with open(path, 'r') as f: N = int(input('What line do you need? > ')) print("This is the line.") print(next(itertools.islice(csv.reader(f), N, None)))
但是,如果您的CSV文件很小,只需将整个内容读入一个列表即可,然后您可以按照常规方式使用索引来访问该列表。这还有一个优点,您可以以随机顺序访问多个不同的行,而不必重置csv阅读器。
my_csv_data = list(reader) print(my_csv_data[N])