⽤R语⾔把超⼤⽂本⽂件拆分成⼏个⼩⽂本⽂件
近⼀段时间⼀直在研究⼀些医院的数据。前两天遇到⼀个尴尬:想打开⼀个仅有3G左右的⽂本⽂件(有时候必须要打开,直接传到数据库满⾜不了需求),破电脑(4G内存的电脑)就是打不开(⽤的Notepad++)。就是这造型:
上⽹搜了⼀些⽅法,下了⼀些⽐较不常⽤的⽂本处理⼯具和其它⼯具,也不理想。得知好多⼈在许多场景都需要打开或者拆分8G甚⾄10G以上的⽂本⽂件,于是想着⾃⼰研究⼀下。下⾯就是我⽤R来拆分⼤⽂本的过程,虽然⽅法⽐较笨,但是简单轻巧、思路清晰。
notepad++1.⾸先把你想要拆分的⼤⽂本⽂件放到R的当前⼯作⽬录下。我的⽂件名在这⾥叫。
2.⽤函数split_file()来拆分⼤⽂本⽂件。
split_file()函数是⾃定义的⼀个函数,⽤来拆分超⼤⽂本⽂件。
它总共有两个参数filename和eachfile_lines_num,即split_file(filename,eachfile_lines_num)。
filename是指需要拆分的超⼤⽂本的名字,eachfile_lines_num是指拆分完的每⼀个⽂件中有多少⾏数据。
split_file()会返回⼀个数值,代表了总共拆分成的⼩⽂本的数量。
split_file()拆分出来的⽂件会放置在R当前的⼯作⽬录下。
使⽤如:split_file("",1000000),它把名为的超⼤⽂本⽂件拆分为每个⽂件只有1000000⾏的⼀个个的⼩⽂本⽂件。
split_file()的细节:
file_split <- function(filename,eachfile_lines_num){ #建⽴函数
c <- file(filename,"r") #建⽴链接
varnames <- paste("splitfile", 1:1000, sep = "_") #建⽴尽可能多但不要太多的动态变量名
i <- 1 #初始值
while(TRUE){
assign(varnames[i],value = readLines(c,n = eachfile_lines_num)) #分别把从filename中读出来的数据存放在变量中
write.table(get(varnames[i]),paste(varnames[i],".txt",sep = "")) #分别把存放在变量中的数据写出到⽂件中
if (length(get(varnames[i])) < eachfile_lines_num) break
else i <- i + 1 #判断循环停⽌条件
}
return(i) #返回⽂件数量
}
我执⾏完file_split("",500000)之后得到了30多个⽂件:
3.对拆分的⽂件进⾏处理。由于过程中⽤到了readLines(),因此拆出来的⽂件每⼀⾏是⼀个字符串,有引号。这好像不符合要求,只需⽤Windows记事本或notepad++或其他⽂本处理应⽤处理⼀下就⾏。在notepad++中执⾏“搜索 -> 替换”把双引号替换成\0就⾏了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论