【发布时间】:2018-11-16 15:20:50
【问题描述】:
在 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)
非常感谢!
【问题讨论】:
标签: python multithreading csv dictionary