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