我有一个大文件(3.5G),我试图使用data.table::fread
导入。
它最初是从一个rpt文件创建的,该文件以文本形式打开并保存为CSV格式。
这适用于较小的文件(相同类型的数据 - 相同列和所有。这个只是更长的时间范围和更广泛的范围)。
当我尝试并运行时
mydata <- fread("mycsv.csv")
我收到错误:
fread(“mycsv.csv”)中的错误:字符串中嵌入的nul:'y \ 0e \ 0a \ 0r \ 0'
这是什么意思?
答案 0 :(得分:14)
我们可以使用类似命令删除命令行上的空终止符:
sed 's/\\0//g' mycsv.csv > mycsv.csv
或者根据@marbel的建议, fread 允许您在文本中传递 sed 调用。如:
fread("sed 's/\\0//g' mycsv.csv")
答案 1 :(得分:4)
在这种情况下,您可以使用read.csv
使用UTF-16LE的fileEncoding而不是fread
。
read.csv("mycsv.csv",fileEncoding="UTF-16LE")
考虑到您的数据大小,使用read.csv
需要几分钟,但我认为这不是什么大问题。
答案 2 :(得分:4)
您可以测试这个小功能:
cleanFiles<-function(file,newfile){
writeLines(iconv(readLines(file,skipNul = TRUE)),newfile)
}
它为我工作
答案 3 :(得分:2)
解决这个问题的非技术方法是
打开有问题的 .csv
Ctrl + A(全选)
打开新的Excel表格
右键单击并选择“粘贴为值”
保存并使用此文件代替原始文件。
为我工作,并没有花太多时间。
答案 4 :(得分:1)
如果在ASCII文件中看到NUL(x00)字符,则可以执行以下操作: data.table :: fread(text = readLines(pathIn,skipNul = T),...)
答案 5 :(得分:1)
我遇到了类似的错误,如果其他人遇到相同的问题,我会分享-
embedded nul in string: '\0HA\xa8S\001\0\0\0\xd8@\xa8S\001\0\0\0h@\xa8S\001\0\0\0\xf8?\xa8S\001\0\0\0\x88'
Calls: as.data.table -> fread
最终导致此原因的原因是我的第一列(标题)比其余列短,列长度不同。