我有一个大的CSV文件(8.1 GB),我试图与R争吵。我使用Python的csvkit in2csv
创建了CSV,从.txt文件转换,但是不知何故,转换导致文件中出现空字符。我导入时出现此错误:
Error in fread("file.csv", nrows = 100) :
embedded nul in string: 'ÿþr\0e\0c\0d\0_\0z\0i\0p\0c\0'
我我能够使用read.csv
轻松导入小块,但这是因为它允许通过fileEncoding
参数进行UTF-16编码。
test <- read.csv("file.csv", nrows=100, fileEncoding="UTF-16LE")
我不敢尝试使用read.csv
导入8 GB文件。
然后我尝试了提供here的解决方案,在其中使用sed s/\\0//g file.csv > file2.csv
来取出空值。该命令执行得很好,并填充了一个新的8GB CSV文件,但我收到了几乎相同的错误:
Error in fread("file2.csv", nrows = 100) :
embedded nul in string: 'ÿþr\0e\0c\0d\0_\0z\0i\0p\0c\0,\0p\0o\0s\0t\0_\0z\0i
所以,那没有用。我此刻难过。考虑到文件的大小,我不能在整个事情上使用read.csv
,而且我不确定如何摆脱原始CSV中的空值。我甚至不确定文件是如何编码为UTF-16的。任何建议或建议都会在这一点上受到高度赞赏。
编辑:我在Windows计算机上。
答案 0 :(得分:3)
如果您使用的是linux / mac,请尝试使用
file <- "file.csv"
tt <- tempfile() # or tempfile(tmpdir="/dev/shm")
system(paste0("tr < ", file, " -d '\\000' >", tt))
fread(tt)
答案 1 :(得分:0)
可能的选择是从http://win-bash.sourceforge.net/在您的计算机上安装bash模拟器,并使用Linux工具删除空终止的字符串,例如,如下所述:Identifying and removing null characters in UNIX或{{3} }
答案 2 :(得分:0)
我认为无意义的字符是因为文件被压缩而发生的。这是我在尝试阅读vcf.gz
文件时发现的。 fread
似乎不支持读取压缩文件。参见例如https://github.com/Rdatatable/data.table/issues/717
readLines()
和read.table()
支持压缩文件,但速度较慢。