Запись чисел в файл - каждое число с новой строки
Задание звучало так: "Создайте текстовый файл с целыми числами, находящимися в нескольких строках файла, разделенные пробелами внутри строк (с помощью приложения Блокнот или 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)))