繁体   English   中英

csv.DictReader仅读取某些行

[英]csv.DictReader only read in certain rows

在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亿行会很慢,而循环中的任何其他条件或处理只会大大降低它的速度。

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

我考虑过的事情:

  • 使用熊猫csv读取例程(您仍然必须在开始时加载整个数据集)
  • 像我的示例代码中那样遍历行,记录行数,然后以多线程批处理方式重新加载行。
  • 使用生成器而不是迭代器(例如,请参阅ThreadPool和Pool进行并行处理

提前谢谢了!

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM