Python - csv 阅读器 - 阅读一个样本。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python - csv 阅读器 - 阅读一个样本。相关的知识,希望对你有一定的参考价值。
我正在做一个python项目,在这个项目中,我使用python csv lib读取csv文件。我不需要所有的文件数据,只需要几行来做一些分析。所以我只想读取一个样本(一定数量的行)。我可以简单地像下面这样做。
num_rows = 1000
with open(path, newline='') as my_file:
sample_reader = csv.reader(my_file)
count = 0
for row in sample_reader:
# do sth with row
count += 1
if count >= num_rows:
break
我的问题是:"sample_reader
"sample_reader "如何在迭代的过程中读取行数?它是否在每次for-loop迭代时只读入一个 "行"?还是使用一个缓冲区,或者更糟糕的是在迭代之前读取整个文件?
我试图在阅读文档(https:/docs.python.org3librarycsv.html#csv.reader)中找到答案,甚至查找代码,但我找不到任何有用的信息。
它是否只在每次for-loop迭代中读取 "行"?还是使用一个缓冲区,或者更糟糕的是在迭代之前读取整个文件?
正如文档中所说。csv.reader
会给你一个迭代器(reader对象)。
在你的例子中,你只是每次从这个迭代器中读取一行,所以你并没有把整个文件读到内存中。它调用了一个 __next__()
方法,当你迭代它时,一次给你每一行。
你可以从 迭代器:
一个代表数据流的对象。重复调用迭代器的 接下来()方法(或将其传递给内置函数next())返回流中的连续项目。
会导致你把整个文件读到内存中的是做这样的事情。
sample_reader = list(csv.reader(my_file))
# Loop over 1000 rows from list
for row in sample_reader[:num_rows]:
# Do something with each line
这将耗尽迭代器,并将所有文件内容加载到一个列表中。这对于小文件来说是很好的,但是对于大文件(比如你的),像你现在做的那样从迭代器中一次只读一行要快得多。
csv.reader
返回一个读取器对象,该对象调用 __next__
方法的迭代器(在本例中是一个文件对象)。每次调用它,它都会返回文件对应行中的字符串列表。请注意,一旦它遍历文件,一旦它到达文件的末端。如果你想重设文件游标,可以使用 seek(0)
(不建议)。
以上是关于Python - csv 阅读器 - 阅读一个样本。的主要内容,如果未能解决你的问题,请参考以下文章