Python 由于包含CRLF(windows新行)的字段,CSV读取中出现Dask标记化错误
我使用dask读取以LF结尾的行(Python 由于包含CRLF(windows新行)的字段,CSV读取中出现Dask标记化错误,python,pandas,dask,Python,Pandas,Dask,我使用dask读取以LF结尾的行(\n)的csv,但某些多行字段包含CRLF(\r\n) 例如: 1234;Hello;47 1235;"Muli <====\r\n here line <====\r\n here field";42 1236;World;43 同一个文件适用于pandas read_csv,但我必须使用Dask,因为它速度更快 我尝试了多个blocksize值(默认值、64M和None),都失败了 我试图将\n和\r\n指
\n
)的csv,但某些多行字段包含CRLF(\r\n
)
例如:
1234;Hello;47
1235;"Muli <====\r\n here
line <====\r\n here
field";42
1236;World;43
- 同一个文件适用于pandas read_csv,但我必须使用Dask,因为它速度更快
- 我尝试了多个blocksize值(默认值、64M和None),都失败了
- 我试图将
和\n
指定为\r\n
参数,但均失败lineterminator
“\n”
,然后开始解析,以获得整行。这意味着无法判断“\n”
字符是否在带引号的字符串中-唯一知道这一点的方法是从文件的开头进行解析
若要解决此问题,您需要编写一些自定义加载逻辑来查找并忽略它们(但如果在边界上发生这种情况会怎样?),或者首先运行文件以查找您认为合适的偏移量。一般来说,人们根本不在您的文件类型上使用阻止加载。(我怀疑这一定有。重复,但我还没有尝试找到它)
Dask从文件中独立读取每个数据块。在每个字节偏移量内,它首先读取以下“\n”
,然后开始解析,以获得整行。这意味着无法判断“\n”
字符是否在带引号的字符串中-唯一知道这一点的方法是从文件的开头进行解析
若要解决此问题,您需要编写一些自定义加载逻辑来查找并忽略它们(但如果在边界上发生这种情况会怎样?),或者首先运行文件以查找您认为合适的偏移量。一般来说,人们根本不在您的文件类型上使用分块加载。我在SO线程中读到了与您类似的答案,但为什么设置为“无”的分块大小不起作用,因为它应该在单个块中读取整个文件?我在SO线程中读到了与您类似的答案,但为什么设置为“无”的分块大小不起作用,因为它应该读取整个文件在一个街区?