CSV文件中的逗号和双引号

时间:2017-05-01 10:37:24

标签: python csv

我有一个带逗号和双引号的csv文件。但是,双引号仅在字符串中有逗号时使用。像这样:

AAA, BBB, "ACB,BCA", 123, "1,987"
DDC, CHA, ACH;HDC, "2,34", 192

我不想用双引号解析逗号,并希望得到以下输出:

x1    x2    x3       x4    x5
AAA   BBB   ACB,BCA  123   1,987
DDC   CHA   ACH;HDC  2,34  192 

简而言之,忽略带双引号的值的逗号,并考虑没有双引号的值的逗号。

我使用它将多个CSV文件合并为一个CSV文件,同时添加一些引用文件名的列:

with open(outfile, "wb") as outfile:
    writer = None
    for input_filename in filenames:
        with open(input_filename, "rb") as infile:
            reader = csv.DictReader(infile, quotechar='"', delimiter=',')
            if writer is None:
                field_names = ["index1"] + ["index2"] + reader.fieldnames
                writer = csv.DictWriter(outfile, field_names)
                writer.writeheader()
            for row in reader:
                row["index1"] = input_filename[1:10]
                row["index2"] = input_filename[10:20]
                writer.writerow(row)

我阅读CSV的具体解决方案是:

csv.DictReader(infile, quotechar='"', delimiter=',')

但这显然不起作用。

有什么建议吗?

编辑:下面是一个更好的例子:

我试图打开的csv文件结构如下:

x 1,x 2,x 3,x 4,x5 AAA, “BB,B”, CCC, DDD, EEE AA1, B;B2, CC3, DD4, EE5

我到目前为止尝试过的解析器,csv.DictReader,pd.read_csv或csv.reader似乎都在阅读&#34 ;;"在B中; B2作为行断路器,它会混淆以下所有列。

以下代码解决了" BB,B"问题,但仍然打破B; B2成新行

csv.reader(fileObject, quotechar='"', delimiter=',',
             quoting=csv.QUOTE_ALL, skipinitialspace=True)

1 个答案:

答案 0 :(得分:1)

下面的代码片段仍然适用于我并且没有打破';'符号

csv.DictReader(fileObject, quotechar='"', delimiter=',',
                 quoting=csv.QUOTE_ALL, skipinitialspace=True)

对我有用。

这是我收到的输出:

{'x1': 'AAA', 'x2': 'BBB', 'x4': '123', 'x5': '1,987', 'x3': 'ACB,BCA'}
{'x1': 'DDC', 'x2': 'CHA', 'x4': '2,34', 'x5': '192', 'x3': 'ACH;HDC'}