在带有多个双引号的字段中读取带有分隔符的 csv 文件
reading csv file with delimiter inside a field with several double quotes
我有一个 csv 文件,其中 ,
分隔了我想用 pandas 读取的列,即 df = pd.read_csv("myfile.csv",sep=',',dtype=str,encoding='utf-8')
。列有多种类型,但我想将所有内容都作为字符串读取。以下表格的一行导致 reader 在该行中看到比预期更多的列:
# 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 = '\'
。
我有一个 csv 文件,其中 ,
分隔了我想用 pandas 读取的列,即 df = pd.read_csv("myfile.csv",sep=',',dtype=str,encoding='utf-8')
。列有多种类型,但我想将所有内容都作为字符串读取。以下表格的一行导致 reader 在该行中看到比预期更多的列:
# 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 = '\'
。