Существует сочетание методов, которые я нашел полезным в решении этого вопроса:
with open(file, 'r+') as fd:
contents = fd.readlines()
contents.insert(index, new_string) # new_string should end in a newline
fd.seek(0) # readlines consumes the iterator, so we need to start over
fd.writelines(contents) # No need to truncate as we are increasing filesize
в нашем конкретном приложении, мы хотели, чтобы добавить его после определенной строки:
with open(file, 'r+') as fd:
contents = fd.readlines()
if match_string in contents[-1]: # Handle last line to prevent IndexError
contents.append(insert_string)
else:
for index, line in enumerate(contents):
if match_string in line and insert_string not in contents[index + 1]:
contents.insert(index + 1, insert_string)
break
fd.seek(0)
fd.writelines(contents)
Если вы хотите, чтобы вставить строку после каждого экземпляра матча, а не только первым, удалите else:
(и правильно Unindent) и break
.
Обратите внимание, что and insert_string not in contents[index + 1]:
не позволяет добавить несколько копий после match_string
, поэтому можно безопасно запускать несколько раз.
Я сомневаюсь, что вы не нашли бы решения для этого с некоторыми фундаментальными исследованиями. Вы уверены, что сделали это? –
@AbhranilDas благодаря хорошей формулировке tkbx Я сразу нашел этот ответ! – dmeu
Связанный: [Как написать в середине текстового файла при чтении его содержимого?] (Http://stackoverflow.com/q/16556944/4279) – jfs