一、前言
在较大数据量的处理中,需要判断许多范围,比如说在10亿数据中判断20个范围,如果每个依次判断这20个范围,显然需要耗费很多的时间,笔者尝试了很多种方式都远远不能满足需要,因此选择了近似手动的删除这些范围内数字,当然读者可以根据需要提高自动的程度,这里就不说了。。
二、实现思路以及说明
1、对于有序的数字存储在文件中,这些范围就对应了20段数字,我们只需要删除中间的文件以及前后文件中的部分内容即可。
2、这里提供了两个简单的删除顺序文件以及文件内顺序数字的函数供读者调用。(注意函数中文件名有格式化,具体调用的时候可根据实际需要进行修改)
3、切割后如果需要进行文件行数的调整,即需要将这些文件顺序填充到一定行数的时候,可以参照笔者的这篇文章。
三、实现代码
import os
import time
def delete_files(Filepath,begin_num,end_num):
for file in range(begin_num,end_num+1):
filepath=Filepath+str(format(file,'05.0f'))+".txt"
os.remove(filepath)
def delete_nums_infile(Filepath,file,begin_num,end_num):
f=open(Filepath+file,"r+")
list_thisfile,flag=[],0
for line in f:
list_thisfile.append(line[:-1])
a=0
for item in list_thisfile:
if(int(item)==begin_num):
index1=a
elif(int(item)==end_num):
index2=a
a+=1
list_thisfile=list_thisfile[0:index1]+list_thisfile[index2+1:]
f.seek(0)
f.truncate()
for item in list_thisfile:
f.write(item+"\n")
f.close()
if __name__=="__main__":
#删除文件
Filepath="F:\\测试文件夹\\"
begin_num=2
end_num=4
delete_files(Filepath,begin_num,end_num)
#删除文件内数字
Filepath="F:\\测试文件夹\\"
file="00006.txt"
begin_num=6
end_num=15
delete_nums_infile(Filepath,file,begin_num,end_num)