Изменить файл python на месте

У меня есть большой xml-файл (40 Gb), который мне нужно разделить на более мелкие куски. Я работаю с ограниченным пространством, так есть ли способ удалить строки из исходного файла, когда я пишу их в новые файлы?

Благодаря!

Предположим, вы хотите разбить файл на N частей, а затем просто начать чтение с обратной стороны файла (более или менее) и повторно вызвать truncate :

Усекайте размер файла. Если присутствует необязательный аргумент размера, файл обрезается до (не более) этого размера. Размер по умолчанию соответствует текущей позиции. Текущее положение файла не изменяется. …

import os import stat BUF_SIZE = 4096 size = os.stat("large_file")[stat.ST_SIZE] chunk_size = size // N # or simply set a fixed chunk size based on your free disk space c = 0 in_ = open("large_file", "r+") while size > 0: in_.seek(-min(size, chunk_size), 2) # now you have to find a safe place to split the file at somehow # just read forward until you found one ... old_pos = in_.tell() with open("small_chunk%2d" % (c, ), "w") as out: b = in_.read(BUF_SIZE) while len(b) > 0: out.write(b) b = in_.read(BUF_SIZE) in_.truncate(old_pos) size = old_pos c += 1 

Будьте осторожны, так как я не испытал ничего из этого. Возможно, потребуется вызвать flush после вызова truncate, и я не знаю, насколько быстро файловая система действительно освободит пространство.

Если вы работаете в Linux / Unix, почему бы не использовать команду split, как этот парень ?

 split --bytes=100m /input/file /output/dir/prefix 

EDIT: затем используйте csplit .