我有一个大文件(3.5G),我试图使用data.table::fread导入。它最初是从一个rpt文件创建的,该文件以文本形式打开,并保存为CSV。这在较小的文件(相同类型的数据,相同的列和所有的。这一个只是为了更长的时间和更广泛的范围)上工作得很好。当我试着逃跑时
data.table::fread
mydata <- fread("mycsv.csv")
字符串我得到的错误:fread(“mycsv.csv”)中存在错误:字符串中嵌入了空字符:“y\0e\0a\0r\0”这意味着什么呢?
jogvjijk1#
我们可以在命令行中删除null终止符,如下所示:
sed 's/\\0//g' mycsv.csv > mycsv.csv
字符串或者像@marbel建议的那样,fread 允许你在文本中传递 sed 调用。例如:
fread("sed 's/\\0//g' mycsv.csv")
型
jvlzgdj92#
在这种情况下,您可以使用read.csv和UTF-16 LE的fileEncoding,而不是fread。
read.csv
fread
read.csv("mycsv.csv",fileEncoding="UTF-16LE")
字符串考虑到您的数据大小,使用read.csv将需要几分钟,但我认为这不是一个大问题。
fivyi3re3#
你可以测试这个小函数:
cleanFiles<-function(file,newfile){ writeLines(iconv(readLines(file,skipNul = TRUE)),newfile) }
字符串这是我的工作
nkhmeac64#
解决这个问题的一个非技术性方法是,1.打开有问题的 .csv
n3h0vuf25#
如果你在ASCII文件中看到NUL (x00)字符,你可以这样做:data.table::fread(text = readLines(pathIn, skipNul = T), ...)
NUL (x00)
data.table::fread(text = readLines(pathIn, skipNul = T), ...)
xytpbqjk6#
我遇到了类似的错误,分享的情况下,别人遇到同样的问题-
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
字符串导致这种情况的原因最终是不同的列长度,我的第一列(标题)比其他列短。
xmakbtuz7#
我发现同样的错误可能是由压缩的csv文件,其扩展名不匹配的压缩。例如,对于用fwrite(mydata, "myfile.csv", compress = "gzip")写的文件,这里的选项compress = "gzip"创建了一个压缩文件,它不是一个文本文件,因为csv本来就是。在这种情况下,文件被压缩,但文件扩展名不显示它和fread是不能自动删除文件之前阅读。如果您在UNIX终端中执行head myfile.csv,您可以看到文件是否被压缩,并且打印输出类似于pG * pG 9,而不是您所期望的。在我的例子中,将文件扩展名重命名为.csv.gz,然后用fread读取就足够了。
fwrite(mydata, "myfile.csv", compress = "gzip")
compress = "gzip"
head myfile.csv
.csv.gz
7条答案
按热度按时间jogvjijk1#
我们可以在命令行中删除null终止符,如下所示:
字符串
或者像@marbel建议的那样,fread 允许你在文本中传递 sed 调用。例如:
型
jvlzgdj92#
在这种情况下,您可以使用
read.csv
和UTF-16 LE的fileEncoding,而不是fread
。字符串
考虑到您的数据大小,使用
read.csv
将需要几分钟,但我认为这不是一个大问题。fivyi3re3#
你可以测试这个小函数:
字符串
这是我的工作
nkhmeac64#
解决这个问题的一个非技术性方法是,
1.打开有问题的 .csv
1.打开新的Excel工作表
1.右键单击并选择“粘贴为值”
1.保存并使用此文件代替原始文件。
对我很有效,而且不需要太多时间。
n3h0vuf25#
如果你在ASCII文件中看到
NUL (x00)
字符,你可以这样做:data.table::fread(text = readLines(pathIn, skipNul = T), ...)
xytpbqjk6#
我遇到了类似的错误,分享的情况下,别人遇到同样的问题-
字符串
导致这种情况的原因最终是不同的列长度,我的第一列(标题)比其他列短。
xmakbtuz7#
我发现同样的错误可能是由压缩的csv文件,其扩展名不匹配的压缩。
例如,对于用
fwrite(mydata, "myfile.csv", compress = "gzip")
写的文件,这里的选项compress = "gzip"
创建了一个压缩文件,它不是一个文本文件,因为csv本来就是。在这种情况下,文件被压缩,但文件扩展名不显示它和
fread
是不能自动删除文件之前阅读。如果您在UNIX终端中执行
head myfile.csv
,您可以看到文件是否被压缩,并且打印输出类似于pG * pG 9,而不是您所期望的。在我的例子中,将文件扩展名重命名为
.csv.gz
,然后用fread
读取就足够了。