csv.DictReader只在某些行中阅读

2024-04-20 04:42:04 发布

您现在位置:Python中文网/ 问答频道 /正文

当使用csv.DictReader函数在Python中?在

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

我有几个.csv文件,每个文件有2亿行,包含10个字段名数据项-因此我使用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

先谢谢你!在


Tags: 文件csv数据importidids示例field
1条回答
网友
1楼 · 发布于 2024-04-20 04:42:04

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

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

请注意,您可以将IDs设置为一个集合,而不是一个列表,这样可以更有效地获得唯一的id。在

相关问题 更多 >