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

这将耗尽迭代器,并将所有文件内容加载到一个列表中。这对于小文件来说是很好的,但是对于大文件(比如你的),像你现在做的那样从迭代器中一次只读一行要快得多。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

主任务并行运行,子任务依次运行。

2022-4-22 4:00:18

解决方案

Jenkins piepleine与dir正确的语法。

2022-4-22 4:00:20

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索