【发布时间】:2015-02-03 02:54:31
【问题描述】:
我必须访问 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)
【问题讨论】:
-
在代码紧凑性方面是否“最佳”?可以
lines = [row for row in reader],然后lines[N]。请注意,与其他一些答案一样,这需要阅读整个文件。 -
这个问题似乎离题了,因为它是关于工作代码的优化,最适合 //codereview.stackexchange.com
-
正如 Ollie 所说,无论代码是什么样子,您都是从文档的位置 0 开始,然后到位置 x。这不像一个数组,可以通过一些数学运算快速跳转到正确的位置。
-
@OllieFord
lines = list(reader)会更惯用。 -
@Veedrac 不错。如果目标是代码的紧凑性,
list(reader)[N]可能是最佳选择。
标签: python file csv python-3.x