Python基于csv模块读取CSV 实现字段提取与全表逐行批量处理
逐行提取指定字段的实现方案
核心问题定位
你当前通过csv模块生成的list_of_rows结构偏离了常规csv解析的预期:列表内的每一个元素,是整行完整拼接的字符串,而非正常拆分完成、以单个列为元素的行列表。
之前单行提取能正常运行,是因为你直接对这个整行字符串做切片取值;循环跑失败的常见原因,是循环时混淆了行对象的类型——误把整行字符串当成拆分好的列列表做索引操作,取到的是单个字符而非对应整行的内容,和单行测试的取值逻辑完全不匹配,自然无法得到正确结果。
两种可直接落地的实现路径
方案1:适配现有读取结果的快速处理
不需要改动原有的csv读取流程,直接基于现有list_of_rows的结构写提取逻辑,示例代码:
import html for row_content in list_of_rows: # 还原字符串里的HTML转义字符,把"换回普通双引号 clean_row = html.unescape(row_content) # 按逗号拆分整行内容 col_list = clean_row.split(',') # 提取第一列的时间字段 time_value = col_list[0].strip() # 提取最后一列的数值字段,去掉外层包裹的引号 number_value = col_list[-1].strip().strip('"') # 打印结果 print(f"时间:{time_value},数值:{number_value}")
注意:手动拆分字符串的方式存在边界缺陷——如果后续非数值字段里也包含逗号,很容易拆错列位置,仅适合当前固定格式的临时场景。
方案2:从根源修正csv解析逻辑,避免字段拆分错误
手动切字符串很容易把被引号包裹、内部带逗号的欧洲格式小数值(比如"33,80")拆成两个独立列,推荐直接调整csv读取流程,用模块内置的解析能力完成准确拆分,示例代码:
import csv import html # 读取原始文件内容 with open("目标CSV文件路径", "r", encoding="utf-8") as f: raw_content = f.read() # 还原HTML转义内容 clean_content = html.unescape(raw_content) # 把清理后的内容按行喂给csv.reader,自动完成列拆分 csv_reader = csv.reader(clean_content.splitlines()) # 此时生成的list_of_rows,每一行都是拆分好的列列表 list_of_rows = list(csv_reader) # 逐行提取逻辑和单行测试完全一致 for row in list_of_rows: time_value = row[0].strip() number_value = row[-1].strip().strip('"') print(f"时间:{time_value},数值:{number_value}")
这种方式的优势是csv模块会自动识别引号包裹的字段边界,不会错误拆分字段内部的逗号,适配不同行的字段变动的能力更强。
内容的提问来源于stack exchange,提问作者Gerry
相关产品推荐
相关产品推荐

