Я не уверен, для чего нужен весь другой код, если вы просто хотите удалить 10-ую строку из файла. Тем не менее, я написал эти два примера двух методов, которые вы можете использовать. Обратите внимание, что это только общие примеры. Вы должны исправить их в своем случае использования и на какую версию системы, платформы или Python вы нацеливаетесь.
Файлы представляют собой непрерывный блок памяти. Просто думайте о файле как о строке текста, которая является изменчивой. Его длина может быть увеличена или уменьшена, но только с одной стороны, и эта сторона является концом файла.
Метод 1: Таким образом, если вы хотите избавиться от 10-й строки. Получить позицию, где находится 10 линия. Прочитайте все после строки 10 и сохраните это в строку. Обрежьте файл до конца 9-й строки. Добавьте что-нибудь после десятого после усечения файла.
fileName = "test.txt"
line10start = -1
line11start = -1
morethan15 = 0
f = open(fileName, "r")
for i in range(0,16):
if ( f.readline() == "" ):
break;
if ( i == 8 ):
line10start = f.tell()
if ( i == 9 ):
line11start = f.tell()
if ( i == 15 ):
morethan15 = 1
if ( morethan15 == 1 ):
f.seek(line11start)
contentAfter10 = f.read()
f.close()
if ( morethan15 == 1 ):
with open(fileName, 'a') as f:
f.seek(line10start);
f.truncate();
f.write(contentAfter10)
Метод 2: Просто прочитайте весь файл в список. Если его длина больше 15, удалите десятый индекс и запишите его обратно в файл. В конечном итоге вам не нужно использовать pop (), вы можете просто присвоить индексу 9 пустую строку.
fileName = "test.txt"
fileContent = []
with open(fileName, 'r') as f:
fileContent = f.readlines()
if ( len(fileContent) > 15 ):
fileContent.pop(9)
with open(fileName, 'w') as f:
f.write("".join(fileContent))
test.txt content:
this is line 1c
this is line 2c
this is line 3c
this is line 4c
this is line 5c
this is line 6c
this is line 7c
this is line 8c
this is line 9c
this is line 10c
this is line 11c
this is line 12c
this is line 13c
this is line 14c
this is line 15c
this is line 16c