barbiturat
Не пойму, как именно записывать первые 1000 строк в один файл, следующие 1000 строк в другой и т.д. Средствами стандартных файловых объектов open() не нашел как сделать.
Ну так тебе и говорят, что надо функции
свои писать. А чтобы писать свои функции, это надо изучить, так как там много всяких принципов.
У тебя должна быть функция, которая добывает нужные строки и возвращает их. У тебя должна быть функция, которая принимает добытые строки и имя файла для их вывода. В результате вызова этих функций у тебя будут добыты строки и потом переданы на запись.
Если у тебя строк в файле не хватает, то функция должна их нагенерить и вернуть.
Вот пример генерации строк и возвращения их из функции
>>> def generate_lines(number):
... out = []
... for i in range(number):
... out.append('строка {}'.format(i + 1))
... return out
...
>>> lines = generate_lines(10)
>>> lines
['строка 1', 'строка 2', 'строка 3', 'строка 4', 'строка 5', 'строка 6', 'строка 7', 'строка 8', 'строка 9', 'строка 10']
>>>
Тут можно сгенерировать десять строк, можно сгенерировать тысячу строк, а можно и файл ещё открывать внутри функции и какие-то первые строки брать из него, а остальные добавлять после них. Главное, что снаружи функции неизвестно, как она добывает строки, поэтому ты можешь их брать как из файла, так и из воздуха. Самое интересное начинается тогда, когда к фунцкии внутри прикручивается другая функция, у которой тоже что-то интересное внутри происходит.
И вот чтобы писать такие конструкции, нужно изучать структурную парадигму, в которой много всякой информации. На угадайке тут много не достигнешь. Надо книжки читать и примеры в них смотреть, копировать стиль написания кода, перенимать правила.
barbiturat
Не пойму, как именно записывать первые 1000 строк в один файл, следующие 1000 строк в другой и т.д. Средствами стандартных файловых объектов open() не нашел как сделать.
Это можно сделать. Достаточно узнать, что файловый объект - это итератор по строкам файла. У тебя же применяется .read(), который читает все строки файла как одно целое. А надо применить list(f) или просто в цикле брать строки и считать, пока тысяча не наберётся.
Пример итерации по строкам файла
with open('file.txt', encoding='utf-8') as fin:
for i in fin:
print(i)
Пример взятия части строк из файла, а части сгенерённой
>>> def generate_lines(number):
... out = []
... for i in range(number):
... out.append('строка {}'.format(i + 1))
... return out
...
>>> def read_n_lines(fname, number):
... out = []
... n = 0
... with open(fname, encoding='utf-8') as fin:
... for i in fin:
... out.append(i)
... n += 1
... if n >= number:
... break
... if n < number:
... out.extend(generate_lines(number - n))
... return out
...
>>> lines = read_n_lines('/etc/passwd', 500)
>>> lines[:3]
['root:x:0:0:root:/root:/bin/bash\n', 'bin:x:1:1:bin:/bin:/sbin/nologin\n', 'daemon:x:2:2:daemon:/sbin:/sbin/nologin\n']
>>> lines[-3:]
['строка 454', 'строка 455', 'строка 456']
>>> len(lines)
500
>>>