В настоящее время вы записываете содержимое каждого входного файла на выход, как только прочитаете их (outfile.write(infile.read() + "\n")
). Чтобы обработать их, я бы предложил вам сначала прочитать их в списки, а затем работать с ними.
Чтобы создать список целых чисел из каждого файла, существует множество методов. Одним из них является чтение всего файла в строку с .read()
, удаление лишних пробелов и символов новой строки с .strip()
и разделение на новые строки. Затем вы можете использовать понимание списка или карту или некоторую эквивалентную методологию для преобразования этого списка строк чисел в список целых чисел.
Затем вам нужно объединить эти два списка и отсортировать их. Есть много алгоритмов для этого. Поскольку ваша задача не указана, вы можете просто использовать встроенную функцию sorted()
или метод списка .sort()
. Это должно было бы работать со списком, состоящим из двух списков, соединенных вместе. Чтобы объединить два списка в Python, мы можем просто добавить их ([1, 2] + [3, 4] == [1, 2, 3, 4]
).
Следовательно, ваше окончательное решение может выглядеть примерно так:
filenames = ['numbers1.txt', 'numbers2.txt']
num_lists = [[int(x) for x in open(f).read().strip().split('\n')] \
for f in filenames]
with open('all_numbers.txt', 'w') as outfile:
outfile.write('\n'.join(str(x) for x in sorted(sum(num_lists, []))) + '\n')
print('Your file is saved under all_numbers.txt')
Обратите внимание, что sum(numbers_list, [])
эквивалентно numbers_list[0] + numbers_list[1]
, но лучше, поскольку ваше решение теперь будет работать с любым количеством входных файлов. :)
Тест
$ echo '20
> 10
> 30
> 50
> 40
> 60' > numbers1.txt
$ echo '999
> 80
> 150
> 101
> 100' > numbers2.txt
$ python -q
>>> filenames = ['numbers1.txt', 'numbers2.txt']
>>> num_lists = [[int(x) for x in open(f).read().strip().split('\n')] \
... for f in filenames]
>>> with open('all_numbers.txt', 'w') as outfile:
... outfile.write('\n'.join(str(x) for x in sorted(sum(num_lists, []))) + '\n')
...
37
>>> print('Your file is saved under all_numbers.txt')
Your file is saved under all_numbers.txt
>>>
$ cat all_numbers.txt
10
20
30
40
50
60
80
100
101
150
999