这里的文件中每行只有两个字符串,且中间有空格分开,且第一个字符串可以转变成int型,每个文件都是已经处理好排好序的,不然也没必要这样操作了,为的是归并以后任然是有序的
filelist = []
for i in range(10):
filepath = r"F:\***************************" + str(i + 1) + ".txt" #首先已存在的文件按照名称已经排好序,依次打放到
file = open(filepath, "rb") #filelist中
filelist.append(file)
newfilelist = []
for j in range(10):
filepath = r"F******************************************" + str(j + 1) + ".txt" #有十个文件就需要10个文件作为中间的替换
file = open(filepath, 'wb+')
newfilelist.append(file)
for line in filelist[0]:
newfilelist[0].write(line) #把原文件的第一个写入第一个新建的文件中
for j in range(9):
newfilelist[j] = open(r"F:\*********************************************+ str(j + 1) + ".txt","rb") #打开已经归并的文件以只读模式
i1 = 0
i2 = 0
mylist = []
mylist2 = []
newmylist = []
newmylist2 = []
mylist = newfilelist[j].readlines()
for line in mylist:
newmylist.append(line.decode("utf-8").split(" ",1))
mylist2 = filelist[j + 1].readlines()
for line in mylist2:
newmylist2.append(line.decode("utf-8").split(" ",1))
listall = []
while i1 < len(mylist) and i2 < len(mylist2): #判断文件第一个元素的int值进行比较来选择是写入那个文件的一行
if int(newmylist[i1][0]) > int(newmylist2[i2][0]):
listall.append(mylist[i1])
i1 += 1
else:
listall.append(mylist2[i2])
i2 += 1
else:
while i1 < len(mylist):
listall.append(mylist[i1])
i1 += 1
while i2 < len(mylist2):
listall.append(mylist2[i2])
i2 += 1
for line in listall:
newfilelist[j + 1].write(line) #最后全都保存到一个list里,再写入文件
newfilelist[j+1].close()
print("end")
print(j)
for i in range(10):
newfilelist[i].close()
filelist[i].close()