CSV文件读取优化:如何连续跳行而非重复从头读取?
优化大CSV文件特定行读取的方案
原代码每次从头读取文件并重复跳过大量行,效率低下。可以通过保持文件连接的读取位置来避免重复操作,同时不加载整个文件到内存:
# 打开文件连接,持续跟踪读取位置 con <- file(filename, "r") # 读取第1行的第一个元素 x1 <- read.csv(con, nrows = 1, header = FALSE)[1, 1] # 跳过第2行到第100000行(共99999行),不输出无关内容 invisible(readLines(con, n = 99999)) # 读取第100001行的第一个元素 x2 <- read.csv(con, nrows = 1, header = FALSE)[1, 1] # 跳过第100002行到第200000行(共99999行) invisible(readLines(con, n = 99999)) # 读取第200001行的第一个元素 x3 <- read.csv(con, nrows = 1, header = FALSE)[1, 1] # 关闭文件连接 close(con)
关键说明
file()创建的连接会保留读取进度,无需每次重新定位文件开头,大幅减少重复IO操作。invisible(readLines(...))用于静默跳过指定行数,避免将无关行加载到内存占用资源。- 若CSV存在带换行符的复杂字段,
readLines可能误判行数,此时可替换为read.csv(con, nrows = 1, skip = 99999, header = FALSE)[1,1],注意skip是基于当前连接位置的相对行数。
内容的提问来源于stack exchange,提问作者Řídící
相关产品推荐
相关产品推荐

