使用Python解决CSV文件字段变量重复编写的繁琐问题
解决CSV字段批量赋值的繁琐问题
嘿,这个重复赋值的活儿确实够烦人的——92个字段手动写完全是浪费时间!给你几个实用的办法,不管是直接生成你要的赋值代码,还是换个更优雅的方式处理这些字段,都能搞定:
方法1:一键生成你需要的赋值代码
写个超简单的小Python脚本,循环输出所有你要的赋值语句,复制粘贴到主程序里就行,几秒钟就能搞定:
# 运行这个脚本,把控制台输出的内容复制到你的代码中 for i in range(92): print(f"f{i+1} = fields[{i}]")
运行后会直接输出从f1 = fields[0]到f92 = fields[91]的所有行,完全不用手动敲或者反复复制修改。
方法2:用namedtuple替代单独变量(更优雅)
如果不想在代码里堆一堆单独的变量,可以用collections.namedtuple把字段包装成一个命名元组,访问起来更直观,代码也更整洁:
from collections import namedtuple import csv # 定义命名元组的字段名,要是CSV有表头的话,建议替换成真实表头名称 CSVRow = namedtuple('CSVRow', [f'f{i+1}' for i in range(92)]) # 读取CSV并转换为命名元组 with open('your_csv_file.csv', 'r', newline='') as csvfile: reader = csv.reader(csvfile) for fields in reader: # 把字段列表转换成命名元组 row = CSVRow(*fields) # 直接通过属性名访问字段,比如 row.f1、row.f2...row.f92 print(row.f1)
方法3:用dataclasses(Python 3.7+,更灵活)
如果需要可变的对象或者后续要给字段加更多逻辑,dataclasses是更好的选择:
from dataclasses import dataclass import csv # 动态生成dataclass的字段 CSVRow = dataclass(type('CSVRow', (), {f'f{i+1}': None for i in range(92)})) with open('your_csv_file.csv', 'r', newline='') as csvfile: reader = csv.reader(csvfile) for fields in reader: row = CSVRow(*fields) # 同样可以用 row.f1、row.f2 访问字段,还能修改字段值(如果需要) row.f1 = "modified_value"
如果CSV本身有表头的话,建议把f1、f2换成真实的字段名称,这样代码可读性会更高哦!
内容的提问来源于stack exchange,提问作者moltarze
相关产品推荐
相关产品推荐

