Python读取带有双引号元素和引号行的CSV

Python读取带有双引号元素和引号行的CSV,python,pandas,csv,Python,Pandas,Csv,所以我有如下csv数据: 1, 2, 3, bla bla bla, 4, 5; "1, 2, 3, ""bla, bla, bla"", 4, 5"; "6, 7, 8, ""more, bla, bla"", 9, 10"; 6, 7, 8, more bla bla, 9, 10; 本质上:某个列有一个带分隔符的字符串,该字符串用双引号括起来,而整行也用引号括起来 我用

所以我有如下csv数据:

1, 2, 3, bla bla bla, 4, 5;
"1, 2, 3, ""bla, bla, bla"", 4, 5";
"6, 7, 8, ""more, bla, bla"", 9, 10";
6, 7, 8, more bla bla, 9, 10;
本质上:某个列有一个带分隔符的字符串,该字符串用双引号括起来,而整行也用引号括起来

我用熊猫试过:

df = pd.read_csv("data.csv", sep=',', skipinitialspace=True, quotechar='"', doublequote=True)
但由于有些行是引号中的,因此将其放在第一列:

column1                        column12    column13    column14    column15    column16
1                              2           3         bla bla bla   4           5
1,2,3,"bla, bla, bla", 4, 5    nan         nan         nan         nan         nan
6,7,8,"more, bla, bla",9,10    nan         nan         nan         nan         nan
6                              7           8         more bla bla  9           10

如何让这些引用的行相应地执行操作?

一种方法是在将其加载到Pandas之前对其进行预处理:

import csv
import pandas as pd
import io

data = []

with open('input.csv') as f_input:
    for line in f_input:
        line = line.strip('";\n').replace('""', '"')
        row = next(csv.reader(io.StringIO(line, newline=''), skipinitialspace=True))
        data.append(row)

df = pd.DataFrame(data)
print(df)
给予:

01123445
01 2 3 bla bla 4 5
1 1 2 3布拉,布拉,布拉4 5
2 6 7 8更多,布拉,布拉9 10
3 6 7 8更多布拉布拉9 10
或者,您可以写出固定版本供以后使用:

with open('output.csv', 'w', newline='') as f_output:
    csv.writer(f_output).writerows(data)

这比我试过的要优雅得多!我尝试用csv.reader再次读取引用的行,并使用一些愚蠢的列表理解来去除最后一个元素的“;”。。。这真的说明了我应该如何记住内置函数:没有想到使用strip()