使用R下载Project Gutenberg文本文件时遇读取警告问题
解决R读取Project Gutenberg文本时的警告问题
咱们来拆解这两个警告的原因,然后给出对应的修复方案:
警告1:invalid or incomplete compressed data
这个问题大概率是因为你下载的pg100.txt其实是gzip压缩格式的文件,只是后缀名保留了txt。Project Gutenberg有时候会自动返回压缩后的文件来节省带宽,但直接用readLines读取未解压的压缩文件就会触发这个警告。
警告2:incomplete final line found
这个通常是因为文件的最后一行没有以换行符结尾,属于文本文件里的常见情况,一般不会影响数据完整性,但如果看着不舒服可以针对性处理。
修复后的代码方案
setwd("D:\\sourceCode") TEXTFILE = "pg100.txt" GZIP_FILE = "pg100.txt.gz" # 处理下载与解压逻辑 if (!file.exists(TEXTFILE)) { # 以二进制模式下载,避免压缩文件损坏 download.file("http://www.gutenberg.org/cache/epub/100/pg100.txt", destfile = GZIP_FILE, mode = "wb") # 直接读取压缩文件内容 gz_conn = gzfile(GZIP_FILE, "r") shakespeare = readLines(gz_conn) close(gz_conn) # 保存解压后的文本,方便后续直接读取 writeLines(shakespeare, TEXTFILE) # 清理临时压缩文件(可选) file.remove(GZIP_FILE) } else { # 读取已存在的文本,抑制"不完整最后一行"的警告 shakespeare = readLines(TEXTFILE, warn = FALSE) }
代码细节说明
mode = "wb":确保压缩文件以二进制格式下载,避免系统自动转换格式导致文件损坏。gzfile():直接读取gzip压缩内容,无需手动解压,简化流程。readLines(..., warn = FALSE):如果确认最后一行数据完整,用这个参数可以屏蔽无关警告;如果担心数据缺失,可以去掉该参数,手动检查tail(shakespeare)确认内容。
内容的提问来源于stack exchange,提问作者Little
相关产品推荐
相关产品推荐

