访问csv文件第N行的最佳方法

发布于 2021-01-29 17:10:02

我必须访问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)
关注者
0
被浏览
51
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    它没有什么区别,但是使用起来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])
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看