在R中用fread读取7z压缩文件报错,求可行解决方案
解决fread结合7z读取压缩文件的报错问题
我来帮你搞定这个问题!你之前的代码报错,核心原因是把shell()函数的执行结果传给了fread,但fread的input参数如果要接收命令的话,应该直接传入命令字符串,而不是命令执行后的输出内容——shell()返回的是命令打印到控制台的文本,不是可被fread识别的命令指令。
正确的实现方式
要达到和unzip -cq类似的效果(直接读取压缩包内的文本内容,不生成中间文件),你需要利用7z的-so参数(表示将解压内容输出到标准输出stdout),然后让fread直接执行这个7z命令:
# 读取gz压缩包里的文本文件 data <- fread(cmd = '7z x -so test.txt.gz', shell = 'cmd.exe')
参数解释
-so:7z的核心参数,告诉它不要把解压后的文件保存到磁盘,而是直接输出到控制台的标准流中,这样fread就能直接捕获这个流作为输入数据。x:7z的解压命令,用于提取压缩包内的内容。
额外场景提示
如果你的压缩包有密码,或者需要指定文本编码,可以这样调整:
# 带密码的压缩包 data <- fread(cmd = '7z x -so -pYourPasswordHere test.txt.gz', shell = 'cmd.exe') # 指定编码(比如GBK) data <- fread(cmd = '7z x -so test.txt.gz', shell = 'cmd.exe', encoding = 'GBK')
内容的提问来源于stack exchange,提问作者Rafael
相关产品推荐
相关产品推荐

