python - csv.DictReader 只读取某些行

标签 python multithreading csv dictionary

在Python中使用csv.DictReader函数时,有没有办法读取.csv文件的某些行?

例如,如果您只想加载 .csv 文件的第 10-20 行而不先加载整个数据集

我有几个 .csv 文件,每个文件有 2 亿行,包含 10 个 field_name 数据条目 - 这就是为什么我使用 DictReader 而不是简单的 csv.read()。

这是我当前方法的一个简单示例:

import csv
from tqdm import tqdm

field_names = ['A','B','C']

IDs = []
with open(file_1) as f:
    reader = csv.DictReader(f,field_names,delimiter=',')
    row_count = 0
    for row in tqdm(reader): 
        row_count+=1
        ID = row['A']
        if ID not in IDs == True: 
        IDs.append(ID)

您可以看到为什么循环遍历 2 亿行会很慢,并且循环中的任何进一步条件或处理只会大大减慢速度。

因此,迭代行组然后对它们进行多线程以节省时间是有意义的。

我考虑过的事情:

  • 使用 pandas csv 读取例程(您仍然需要加载 整个数据集在开始)
  • 如我的示例所示迭代行 代码,记录行数,然后在多线程中重新加载行 批处理。
  • 使用生成器而不是迭代器(例如,参见 ThreadPool and Pool for parallel processing )

非常感谢!

最佳答案

您可以使用enumerate来生成行索引,并在索引达到目标时打破循环:

IDs = set()
for i, row in enumerate(reader):
    if i > 9:
        IDs.add(row['A'])
    elif i > 19:
        break

请注意,您可以将 ID 设置为集合而不是列表,以提高获取唯一 ID 的效率。

关于python - csv.DictReader 只读取某些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53340694/

相关文章:

python - 线程和条件 : debugging the acquirement

Python 关闭 TCP 连接

linux - 如何在unix中修改同一个文件?

来自第二个表的 MySQL CSV 导出 ID

Python - 读取msgpack文件并将其存储到数据框中

python - Wagatail 嵌入 YouTube - 阻止相关视频显示

c++ - 如何在 Python 中实现 C++ 类,由 C++ 调用?

python - 是否可以在 wxPython 应用程序中使用 Panda3D?

c# - C# 中 FOR 循环中的多个相关异步 REST API 调用(链接)

python - 查询维护外键关系的CSV文件?这可能吗?