Python CSV文件中的逗号和双引号

Python CSV文件中的逗号和双引号,python,csv,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文件。但是,双引号仅在字符串中包含逗号时使用。像这样:

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 

简而言之,忽略双引号的逗号,考虑没有双引号的值逗号。< /P> 我正在使用此功能将多个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\u csv或csv.reader似乎在读B中的“;”;B2作为一个行分隔符,它将混乱以下所有列

下面的代码解决了“BB,B”问题,但仍然破坏了B;B2进入新的一行

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

下面的代码片段仍然适用于我,并且没有在“;”上中断象征

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'}

“这显然不起作用”——不是吗?它的作用是什么
DictReader
需要标题,您是否尝试过提供这些标题?否则,您只能从该输入中获得一行,
{AAA':'DDC','ACB':'ACH;HDC','987':无,'BBB':'CHA','BCA':'2','123':'34','1':'192'}
。我认为字段名对于读者来说是可选的,但在我编写时,它会将大多数情况放在正确的列中。除了x3列中的。它适合“ACB,BCA”“进入x3,但当它看到ACH时跳到row;HDC。如果第一行是标题,则为可选;在你的例子中你没有表现出来。你能给我一个建议吗;例如,在不显示输出writer.csv的详细信息的情况下,仅打印读取的行可能就足够了。DictReader也可以使用相同的参数。我对它进行了测试,并在此过程中了解了.DictReader()函数的实用性