python如何修剪csv DictReader键中的尾随空格

Din*_*esh 12 python

我正在使用python(2.6)csv DictReader.我的输入文件有一个标题行,其中列名称有尾随空格:

colname1,      colname2     ,col3, etc.
XX, YY, ZZ
Run Code Online (Sandbox Code Playgroud)

返回的dict对象有key()= ['colname1', 'colname2 ', 'col3']

是否可以选择修剪键的前导和尾随空格?

- 编辑

在键名处理中出现问题:

with open(fname) as f:
   r = csv.DictReader(f)
   for row in r:
      print "processing", r["column1"], r["column2"]
Run Code Online (Sandbox Code Playgroud)

这些文件是数据库转储.转储程序太聪明了 - 它根据数据调整输出列宽度 - 这意味着不同的选择集将具有不同的列宽和不同的密钥长度.有时我必须使用r['column2 '],有时填充或减少空间.哎哟!

Wol*_*lph 14

只需手动读取第一行并将其传递给DictReader.

with open('file.csv') as fh:
    header = [h.strip() for h in fh.next().split(',')]
    reader = csv.DictReader(fh, fieldnames=header)
Run Code Online (Sandbox Code Playgroud)

  • 我希望这是csv.DictReader中的一个选项.(有没有地方表达这样的愿望清单?) (3认同)

klu*_*car 7

您需要在 csv 模块中注册自定义方言

csv.register_dialect('MyDialect', quotechar='"', skipinitialspace=True, quoting=csv.QUOTE_NONE, lineterminator='\n', strict=True)
Run Code Online (Sandbox Code Playgroud)

然后在创建 DictReader 时使用方言:

my_reader = csv.DictReader(trip_file, dialect='MyDialect')
Run Code Online (Sandbox Code Playgroud)

这是所有方言选项

  • 这只会删除前导空格,但没有删除尾随空格的选项。 (3认同)

Lui*_*uis 6

Python3版本

with open('file.csv') as fh:
    header = [h.strip() for h in fh.readline().split(',')]
    reader = csv.DictReader(fh, fieldnames=header)
Run Code Online (Sandbox Code Playgroud)