Объединить несколько несортированных текстовых файлов в один отсортированный файл с помощью Python - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть список имен текстовых файлов в качестве переменной в Python.Я хочу создать другой текстовый файл, который содержит все строки файлов в списке, и я хочу, чтобы этот файл сортировался по строкам.

Как я могу сделать это наиболее эффективным способом, используя python?

Это эквивалент того, что я хочу сделать в bash:

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

1 Ответ

0 голосов
/ 19 сентября 2019

Я создал простые файлы по 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)

Объяснение:

Все файлы для чтения пишутся в одном предложении "с открытым (file_name, 'r')».'R' обозначает чтение.

Выходной файл находится в следующем предложении 'с открытым ("outfile.txt", "w") "

Затем был создан список симена переменных файлов и буква "b" между ними.Буква «b» была помещена специально, потому что вопрос формата.

Когда «цикл для» находит файл (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...