Как насчет этого?Он редактирует файл на месте.Я протестировал его на некоторых небольших текстовых файлах (в Python 2.6.1), но я не уверен, насколько хорошо он будет работать с массивными файлами из-за всех скачков, но все же ...
Я использовал неопределенный цикл while с ручной проверкой EOF, потому что for line in f:
не работал правильно (предположительно, все прыжки нарушали нормальную итерацию).Возможно, есть лучший способ проверить это, но я относительно новичок в Python, поэтому кто-то, пожалуйста, дайте мне знать, если есть.
Также вам нужно определить функцию isRequired(line)
.
writeLoc = 0
readLoc = 0
with open( "filename" , "r+" ) as f:
while True:
line = f.readline()
#manual EOF check; not sure of the correct
#Python way to do this manually...
if line == "":
break
#save how far we've read
readLoc = f.tell()
#if we need this line write it and
#update the write location
if isRequired(line):
f.seek( writeLoc )
f.write( line )
writeLoc = f.tell()
f.seek( readLoc )
#finally, chop off the rest of file that's no longer needed
f.truncate( writeLoc )