Python 在文本中包含分号和双引号的行中拆分列时出现问题

Python 在文本中包含分号和双引号的行中拆分列时出现问题,python,csv,Python,Csv,我想从csv文件中导入几行。问题是,在正文的中间很少有包含分号和双引号的列。 既然我的delimeter是;CSV引用是“,所以它一看到它就拆分列;”在文本的中间。 我的示例csv文件是: "hello";"<SPAN onmouseup="__doPostBack('bb','')">;</SPAN> <SPAN onmouseup="__doPostBack('j','')" style="DISPLAY: none" Enabled="true"> ";

我想从csv文件中导入几行。问题是,在正文的中间很少有包含分号和双引号的列。

既然我的delimeter是;CSV引用是“,所以它一看到它就拆分列;”在文本的中间。 我的示例csv文件是:

"hello";"<SPAN onmouseup="__doPostBack('bb','')">;</SPAN> <SPAN onmouseup="__doPostBack('j','')" style="DISPLAY: none" Enabled="true"> ";"bye"
“你好”;";  ";“再见”
读取行的代码为:

csv.reader((line.replace('\0','') for line in f) , delimiter=';',quotechar = '"') 

 for row in reader:
     print row


 and it prints ;['hello', "<SPAN onmouseup=__doPostBack('bb','')>", '</SPAN> <SPAN onmouseup="__doPostBack(\'j\',\'\')" style="DISPLAY: none" Enabled="true"> "', 'bye']
csv.reader((f中的行的line.replace('\0',''),分隔符=';',引号=')
对于读取器中的行:
打印行
然后打印;[“你好”,“再见”]
我希望结果如下:

 row[0] = hello
 row[1] = <SPAN onmouseup="__doPostBack('bb','')">;</SPAN> <SPAN onmouseup="__doPostBack('j','')" style="DISPLAY: none" Enabled="true"> 
 row[2] = bye
行[0]=您好
行[1]=;
第[2]行=再见
当我得到的输出是:

row[0] = hello
 row[1] = <SPAN onmouseup="__doPostBack('bb','')">
 row[2] = </SPAN> <SPAN onmouseup="__doPostBack('j','')" style="DISPLAY: none" Enabled="true"> 
 row[3] = bye
行[0]=您好
第[1]行=
第[2]行=
第[3]行=再见
我使用了中定义的代码
“reader=csv.reader(open”(“yourfile.csv”,“rb”),delimiter=';”)“
,但这段代码仍然将我的行拆分为4行

任何帮助都将不胜感激


谢谢。

我想您的输入格式有问题,它不适合CSV:

引自:

包含特殊字符(逗号、换行符或双引号)的字段必须用双引号括起来。[…]如果字段的值包含双引号字符,则通过在其旁边放置另一个双引号字符对其进行转义

您的输入文件在转义双引号时似乎遗漏了


也就是说,如果您不能对输入做任何事情,您必须在数据中找到某种模式,以便在将文件传递给
cvs.reader
之前修复该文件,或者您必须根据所述模式手动解析该文件。这可能会很快变得非常复杂。

我认为您的输入格式有问题,这不是正确的CSV:

引自:

包含特殊字符(逗号、换行符或双引号)的字段必须用双引号括起来。[…]如果字段的值包含双引号字符,则通过在其旁边放置另一个双引号字符对其进行转义

您的输入文件在转义双引号时似乎遗漏了


也就是说,如果您不能对输入做任何事情,您必须在数据中找到某种模式,以便在将文件传递给
cvs.reader
之前修复该文件,或者您必须根据所述模式手动解析该文件。这可能会很快变得非常复杂。

是否可以始终在第一个分号和最后一个分号处拆分(您的示例建议这样做),或者是否有行不起作用?我拆分了那些用双引号括起来并用分号分隔的值,例如,“a”;“b”,但如果行是“a”;“b”;“c;d”,那么在这种情况下,c和d不应该分开。我的问题是,即使c和d是分开的。是否可以总是在第一个分号和最后一个分号处分开(你的例子表明),或者有行不起作用?我把那些用双引号括起来并用分号分开的值分开,例如,“a”;“b”,但如果行是“a”;“b”;“c;d”,那么在这种情况下,c和d不应该分开。我的问题是,即使c和d是分开的。