Запись чисел в файл - каждое число с новой строки

Рейтинг: 0Ответов: 1Опубликовано: 30.04.2023

Задание звучало так: "Создайте текстовый файл с целыми числами, находящимися в нескольких строках файла, разделенные пробелами внутри строк (с помощью приложения Блокнот или WordPad). Чтение чисел из существующего файла и создание двух новых файлов: в один записываются четные числа, в другой – нечетные (каждое число с новой строки)." Файл я создала с помощью блокнота, его содержимое:

6 46 7878
45 428 547 8
4 9876 1 4567 7
0

Код:

c2 = open("C:/Users/user/Desktop/PythonFiles/ch2.txt",'r')
chet = open("chet.txt",'w')
nechet = open("nechet.txt",'w')
for l in c2:
    #print(l.strip()) вывод без преобразования в списки целых чисел
    #print(list(map(int,l.split(' '))))
    chet.write(str([i for i in map(int,l.split(' ')) if i%2 == 0])+'\n')
    nechet.write(str([i for i in map(int,l.split(' ')) if i%2 != 0])+'\n')
chet.close()
nechet.close()
with open('chet.txt','r') as ch:
    print(ch.read())

with open('nechet.txt','r') as nech:
    print(nech.read())
c2.close()

Вывод следующий:

[6, 46, 7878]
[428, 8]
[4, 9876]
[0]

[]
[45, 547]
[1, 4567, 7]
[]

Желаемый вывод:

6
46
7878
428
8
4
9876
0


45
547
1
4567
7

Понимаю, что решение какое-то очевидное, но додуматься не могу. Заранее спасибо за помощь

Ответы

▲ 1Принят

Записывай каждое число отдельно:

[chet.write(f'{i}\n') for i in map(int, l.split(' ')) if i % 2 == 0]
[nechet.write(f'{i}\n') for i in map(int, l.split(' ')) if i % 2 != 0]

Либо сформируй список, переведи каждое значение в строку и записывай через функцию join, <your_path_to_nums> - путь до файла с числами:

with open('<your_path_to_nums>', 'r', encoding='utf-8') as nums:
    nums = nums.read().split()
    odd = [num for num in map(int, nums) if num % 2 != 0]
    even = [num for num in map(int, nums) if num % 2 == 0]

    with open('odd.txt', 'w') as ods:
        ods.write('\n'.join(map(str, odd)))

    with open('even.txt', 'w') as evens:
        evens.write('\n'.join(map(str, even)))