我有一个csv文件,其中,
分隔了我想用熊猫读取的列,即df = pd.read_csv("myfile.csv",sep=',',dtype=str,encoding='utf-8')
。列的类型多种多样,但我想将所有内容读取为字符串。以下形式的一行导致读者在该行中看到的列比预期的多:
# column 1, column 2, column 3, ...
46745,"\\"\\"\\"blabla\\"\\" a, b bli\\"\\"more bla.\\"\\" bl blu \\"\\"bli bla blub\\"\\"\\"","something else",...
某些字段,如此处的第二和第三列,用双引号引起来。第二个字段与其他双引号字段不同的原因在于,它包含多个引号,使得当解析器到达,
时,它不会意识到它实际上仍然在它应该识别的引号内,因为最终引号字符应该后跟定界符。有趣的是,当您传递engine='python'
时,解析器实际上意识到了这一点,但没有得出引号只是还没有结束的结论,而是抛出了错误',' expected after '"'
。
我为关键字参数quoting
,quotechar
,sep
和engine
尝试了各种组合。一切都无济于事。
编辑:根据要求提供的示例
import io
s = 'column1,column2,column3\n3463,hello,"more, stuff"\n46745,"\\"\\"\\"blabla\\"\\" a, b bli\\"\\"more bla.\\"\\" bl blu \\"\\"bli bla blub\\"\\"\\"","something else"'
df = pd.read_csv(io.StringIO(s),sep=',',dtype=str,encoding='utf-8')
如果注释掉最后一行,它将起作用。
通常,字段内的引号会与另一个引号("
)进行转义,这可能是解析器的默认值。
在这种情况下,您可能需要使用escapechar = '\\'
。