ваш рекурсивный подход обречен на провал: у вас может получиться слишком много открытых файлов одновременно, поскольку блоки with
не закрываются до конца программы.
Лучше иметь один дескриптороткройте и запишите в него, закройте и снова откройте новый дескриптор при обнаружении «От».
также откройте ваши файлы в режиме записи, не добавляя.Приведенный ниже код пытается выполнить минимальные операции и тесты, чтобы записать каждую строку в файл, и закрыть / открыть другой файл, когда найден From:
.Кроме того, в конце концов, последний файл закрыт.
def chunkUp(mbox):
with open(mbox, 'r') as bigfile:
handle = None
chunk = 0
for line in bigfile:
if line.startswith("From "):
# next (or first) file
chunk += 1
if handle is not None:
handle.close()
handle = None
# file was closed / first file: create a new one
if handle is None:
handle = open("./TestChunks/chunks/chunk_{}.txt".format(chunk), "w")
# write the line in the current file
handle.write(line)
if handle is not None:
handle.close()
Я не проверял его, но он достаточно прост, он должен работать.Если в первой строке файла не указано «От», все ранее сохраненные строки сохраняются в chunk_0.txt
файле.