C'è una combinazione di tecniche che ho trovato utile per risolvere questo problema:
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
nella nostra applicazione particolare, abbiamo voluto aggiungere un commento dopo una certa stringa:
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)
Se si vuole inserire la stringa dopo ogni istanza della partita, invece che solo il primo, togliere la else:
(e correttamente Unindent) e il break
.
Si noti inoltre che il and insert_string not in contents[index + 1]:
impedisce di aggiungere più di una copia dopo il match_string
, quindi è possibile eseguire più volte.
Dubito che non avresti trovato una soluzione a questo con alcune ricerche di base. Sei sicuro di averlo fatto? –
@AbhranilDas grazie al buon testo di tkbx ho trovato subito questa risposta! – dmeu
correlati: [Come si scrive al centro di un file di testo durante la lettura dei suoi contenuti?] (Http://stackoverflow.com/q/16556944/4279) – jfs