首页 > 解决方案 > 使用python将多个未排序的文本文件合并为一个排序文件

问题描述

我有一个文本文件名称列表作为python中的变量。我想创建另一个文本文件,其中包含列表中文件的所有行,并且我希望这个文件按行排序。

如何使用 python 以最有效的方式做到这一点?

这相当于我想在 bash 中做的事情:

cat file1.txt file2.txt file3.txt | sort -h >> combined_and_sorted.txt

标签: pythonfilesorting

解决方案


我创建了每个 3 行的简单文件。

我的解决方案是:

 with open("file 1.txt", 'r') as f1, open("file 2.txt", 'r') as f2,open("file 3.txt", 'r') as f3:
    with open("outfile.txt", 'w') as o:

       files    = [f1,'b',f2,'b',f3]

       for i in files:

           if i != 'b':
              lines = i.readlines()
           else:
              lines = '\n'

           o.writelines(lines)

说明:

所有要读取的文件都写在一个句子“with open (file_name,'r')”上。'r' 代表阅读。

输出文件在下一句'with open("outfile.txt", 'w')'

然后创建了一个列表,其中包含文件的变量名称和它们之间的字母“b”。'b' 是故意放置的,因为格式问题。

当“循环 for”找到一个文件 (f1,f2,f3) 时,它会获取文件的行。否则它会得到一个'b'并添加一个换行符。

在过程结束时,所有内容都写入 outfile.txt,变量名称为“o”,按照文件和文件中的行的顺序。

如果没有 'b',输出文件会这样写:

file 1 line 1
file 1 line 2
file 1 line 3file 2 line 1
file 2 line 2
file 2 line 3file 3 line 1
file 3 line 2
file 3 line 3

使用我发布的代码,它以这种方式打印:

f  = open("outfile.txt",'r')
print(f.read())

file 1 line 1
file 1 line 2
file 1 line 3
file 2 line 1
file 2 line 2
file 2 line 3
file 3 line 1
file 3 line 2
file 3 line 3

推荐阅读