如何指定(在读取文件时)并将此3个字符的字符串","
指定(在输出中)作为.csv
分隔符?例如:"col1","col2","col3","col4"
需要用于读取和输出的代码:
import csv
with open('a.csv', 'r') as infile, open('reordered.csv', 'a') as outfile:
fieldnames = ['B', 'C', 'A', 'D']
writer = csv.DictWriter(outfile, delimiter=',', fieldnames=fieldnames)
writer.writeheader()
for row in csv.DictReader(infile):
writer.writerow(row)
我试图查找(https://docs.python.org/2.0/ref/strings.html)等,但目前尚不清楚。
更新:正如其他人所指出的,这可能不是","
分隔符,而是,
分隔符和"values"
。无论如何,我的值包含逗号,
,因此列之间的","
模式有助于维护列结构。
答案 0 :(得分:1)
您需要定义quote character,设置分隔符无法获得所需的结果。
import csv
with open('a.csv', 'r') as f:
reader = csv.reader(f, delimiter=',', quotechar='"')
for row in reader:
print row
编辑:对于代码的更改,它看起来有点像这样:
with open('a.csv', 'r') as infile, open('reordered.csv', 'a') as outfile:
fieldnamesout = ['B', 'C', 'A', 'D']
fieldnamesin = ['A', 'B', 'C', 'D']
reader = csv.DictReader(infile, delimiter=',', quotechar='"', fieldnames=fieldnamesin)
writer = csv.DictWriter(outfile, delimiter=',', quotechar='"', fieldnames=fieldnamesout, quoting=csv.QUOTE_ALL)
for row in reader:
writer.writerow(row)
请注意quoting=csv.QUOTE_ALL
,它指示作者根据quotechar
引用所有字段,这可能是您想要的,也可能不是,其他选项是quoting=csv.QUOTE_NONNUMERIC
。
答案 1 :(得分:0)
好像你的值是字符串文字。我不知道cvs模块是否可以开箱即用。它不是解析问题,而是数据处理问题。
您的值在引号字符中。因此,要么在处理数据时field_value.replace('"', '')
截断它们,要么稍后在'"{}"'.format(field_value)
上添加它们,要么直接对数据字段进行操作,保留引号字符。