如何多次进入enumerate()循环实现CSV文件分批读取?
用enumerate()分批读取大型CSV的解决方案
刚好碰到过类似的场景,我来给你捋捋怎么用enumerate()搞定分批读大CSV的问题~你之前的脚本只读到前100行,大概率是因为处理完第一批后就终止了迭代,没继续遍历文件剩余内容。其实靠着enumerate()自带的索引,完全能实现每100行一批的循环处理。
直接可用的实现代码
先给你上核心代码,注释里写清楚了逻辑:
pathInput = "input.csv" batch_size = 100 # 用with语句自动管理文件,省得手动关文件 with open(pathInput, 'r') as f: current_batch = [] # enumerate从1开始计数,方便算批次号 for line_num, line in enumerate(f, start=1): # 把当前行加入批次列表,strip()可以去掉换行符,按需调整 current_batch.append(line.strip()) # 每攒够100行就处理一次 if line_num % batch_size == 0: print(f"正在处理第 {line_num//batch_size} 批次,共 {len(current_batch)} 行") # 这里替换成你的业务逻辑,比如写入数据库、分析数据 # process_my_data(current_batch) current_batch = [] # 清空列表,准备下一批 # 别忘了处理最后一批不足100行的内容! if current_batch: print(f"处理最后一批剩余的 {len(current_batch)} 行") # process_my_data(current_batch)
关键逻辑说明
- 文件对象本身是可迭代的,
enumerate(f)会一直遍历到文件末尾,不会中途停下,只要你没手动终止循环。 - 用
line_num % batch_size == 0判断是否凑够了一批,这样每到第100、200...行就触发批次处理。 - 最后一定要检查
current_batch是否为空,不然文件末尾不足100行的内容会被漏掉。
如果需要规范解析CSV(带表头/字段处理)
要是你的CSV有表头,或者需要把每行解析成结构化数据,结合csv模块会更靠谱:
import csv pathInput = "input.csv" batch_size = 100 with open(pathInput, 'r') as f: csv_reader = csv.reader(f) # 先读表头(如果你的CSV有表头的话,没有就删掉这行) header = next(csv_reader) current_batch = [] for line_num, row in enumerate(csv_reader, start=1): current_batch.append(row) if line_num % batch_size == 0: print(f"处理第 {line_num//batch_size} 批次,表头: {header}") # 这里可以传入表头和批次数据处理 # process_csv_batch(header, current_batch) current_batch = [] if current_batch: print(f"处理最后一批剩余的 {len(current_batch)} 行") # process_csv_batch(header, current_batch)
这样改完之后,就能完整遍历整个大CSV,用enumerate()实现分批处理,再也不会只停在前100行啦~
内容的提问来源于stack exchange,提问作者Mas A
相关产品推荐
相关产品推荐

