Изменение одной строки в файле - PullRequest
4 голосов
/ 23 июня 2011

Есть ли в Python способ изменить одну строку в файле без цикла for для всех строк?

Точные позиции в файле, которые необходимо изменить, неизвестны.

Ответы [ 3 ]

3 голосов
/ 23 июня 2011

Если мы не говорим о довольно надуманной ситуации, в которой вы уже много знаете о файле, ответ - нет.Вы должны перебрать файл, чтобы определить, где находятся символы новой строки;нет ничего особенного в «строке», когда дело доходит до хранения файлов - все выглядит одинаково.

3 голосов
/ 23 июня 2011

Да, вы можете изменить строку на месте, но если длина изменится, вам придется переписать оставшуюся часть файла.

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

Существуют исключения - если все строки имеют фиксированную длину или у вас есть какой-то индекс для файла, например

2 голосов
/ 23 июня 2011

Это должно работать -

f = open(r'full_path_to_your_file', 'r')    # pass an appropriate path of the required file
lines = f.readlines()
lines[n-1] = "your new text for this line"    # n is the line number you want to edit; subtract 1 as indexing of list starts from 0
f.close()   # close the file and reopen in write mode to enable writing to file; you can also open in append mode and use "seek", but you will have some unwanted old data if the new data is shorter in length.

f = open(r'full_path_to_your_file', 'w')
f.writelines(lines)
# do the remaining operations on the file
f.close()

Однако это может потреблять много ресурсов (как времени, так и памяти), если размер вашего файла слишком велик, потому что функция f.readlines() загружает весь файл, разбитый настрок в списке.
Это подойдет для небольших и средних файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...