我正在使用python(2.6)csv DictReader。我的输入文件有一个标题行,其中列名称有尾随空格:
colname1, colname2 ,col3, etc.
XX, YY, ZZ
返回的dict对象有key()= ['colname1', 'colname2 ', 'col3']
是否可以选择修剪键中的前导和尾随空格?
- 修改
在按名称处理时会出现问题:
with open(fname) as f:
r = csv.DictReader(f)
for row in r:
print "processing", r["column1"], r["column2"]
文件是数据库转储。转储程序太聪明了 - 它根据数据调整输出列宽度 - 这意味着不同的选择集将具有不同的列宽和不同的密钥长度。有时我必须使用r['column2 ']
,有时填充或减少空格。哎哟!
答案 0 :(得分:10)
只需手动阅读第一行并将其传递给DictReader
。
with open('file.csv') as fh:
header = [h.strip() for h in fh.next().split(',')]
reader = csv.DictReader(fh, fieldnames=header)
答案 1 :(得分:3)
您需要在csv模块中注册自定义方言
csv.register_dialect('MyDialect', quotechar='"', skipinitialspace=True, quoting=csv.QUOTE_NONE, lineterminator='\n', strict=True)
然后在创建DictReader时使用方言:
my_reader = csv.DictReader(trip_file, dialect='MyDialect')
以下是所有Dialect Options
答案 2 :(得分:0)
Python3版本
with open('file.csv') as fh:
header = [h.strip() for h in fh.readline().split(',')]
reader = csv.DictReader(fh, fieldnames=header)