[英]How to sort line by line in multi files in Python?
我有一些文本文件,我想逐个文件和逐行读取文件,并排序并写入Python中的一个文件,例如:
file 1:
C
D
E
file 2:
1
2
3
4
file 3:
#
$
*
File 4,.......
结果应类似于以下序列,位于一个文件中:
C
1
#
D
2
$
E
3
*
C
4
#
D
1
#
您可以在文件上使用迭代器列表。 然后,您需要不断循环遍历这些迭代器,直到使用完一个文件为止。 您可以使用while循环,或者此处显示的是使用itertools循环:
import glob
import itertools
fs = glob.glob("./*py") # Use glob module to get files with a pattern
fits = [open(i, "r") for i in fs] # Create a list of file iterators
with open("blah", "w") as out:
for f in itertools.cycle(fits): # Loop over you list until one file is consumed
try:
l = next(f).split(" ")
s = sorted(l)
out.write(" ".join(s) + "/n")
print s
except: # If one file has been read, the next(f) will raise an exception and this will stop the loop
break
这看起来与您提出(然后删除)的另一个问题有关。
我假设您希望能够读取文件 , 创建生成器 , 合并生成器 , 对 生成器 的输出进行排序 ,然后写入文件 。
请记住,要像这样对每一行进行排序,您必须将其存储在内存中。 如果处理非常大的文件,则需要以一种内存意识更高的方式来处理它。
首先,让您的生成器打开文件并逐行读取:
def line_gen(file_name):
with open(file_name, 'r') as f:
for line in f.readlines():
yield line
然后,通过创建将按顺序迭代每个生成器的生成器来“合并”生成器。
def merge_gens(*gens):
for gen in gens:
for x in gen:
yield x
然后我们可以创建我们的生成器:
gen1 = line_gen('f1.txt')
gen2 = line_gen('f2.txt')
合并它们:
comb_gen = merge_gens(gen1, gen2)
从生成器创建列表。 (这是可能占用大量内存的步骤。):
itered_list = [x for x in comb_gen]
排序列表:
sorted_list = sorted(itered_list)
写入文件:
with open('f3.txt', 'w') as f:
for line in sorted_list:
f.write(line + '\n')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.