如何指定","在.csv中作为3个字符的分隔符字符串?

时间:2017-11-07 08:42:53

标签: python python-3.x

如何指定(在读取文件时)并将此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"。无论如何,我的值包含逗号,,因此列之间的","模式有助于维护列结构。

2 个答案:

答案 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)上添加它们,要么直接对数据字段进行操作,保留引号字符。