如果行中的列包含分号和文本中的双引号,则会出现问题

Roh*_*ada 0 python csv

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

因为我的天气是; 和csv引用是",所以它一见到就拆分列;并且"在文本的中间.

我的示例csv文件是:

"hello";"<SPAN onmouseup="__doPostBack('bb','')">;</SPAN> <SPAN onmouseup="__doPostBack('j','')" style="DISPLAY: none" Enabled="true"> ";"bye"
Run Code Online (Sandbox Code Playgroud)

读取行的代码是:

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']
Run Code Online (Sandbox Code Playgroud)

我希望结果如下:

 row[0] = hello
 row[1] = <SPAN onmouseup="__doPostBack('bb','')">;</SPAN> <SPAN onmouseup="__doPostBack('j','')" style="DISPLAY: none" Enabled="true"> 
 row[2] = bye
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

row[0] = hello
 row[1] = <SPAN onmouseup="__doPostBack('bb','')">
 row[2] = </SPAN> <SPAN onmouseup="__doPostBack('j','')" style="DISPLAY: none" Enabled="true"> 
 row[3] = bye
Run Code Online (Sandbox Code Playgroud)

我已经使用了python split函数中" reader = csv.reader(open("yourfile.csv", "rb"), delimiter=';') "定义的代码,但是这段代码仍将我的行拆分为4.

任何帮助将不胜感激.

谢谢..

mac*_*mac 5

我认为输入格式有问题,这不是合适的CSV:

引自维基百科:

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

似乎您的输入文件在转义双引号时未命中.

也就是说,如果你不能对输入做任何事情,你将不得不在数据中提出某种模式,允许你在将文件传递给之前修复文件cvs.reader,或者你必须手动解析它.说模式.这可以非常快速地变得非常复杂.