Risposte:
with open("test.txt", "a") as myfile:
myfile.write("appended text")
with open(file, "a")
metodo. Forse sono vecchio stile, ma qual è il vantaggio rispettoopen(file, "a") ... file.close()
print("appended text", file=myfile)
è anche possibile, per un api più familiare.
È necessario aprire il file in modalità append, impostando "a" o "ab" come modalità. Vedi open () .
Quando si apre con la modalità "a", la posizione di scrittura sarà sempre alla fine del file (un'appendice). Puoi aprire con "a +" per consentire la lettura, cercare indietro e leggere (ma tutte le scritture rimarranno comunque alla fine del file!).
Esempio:
>>> with open('test1','wb') as f:
f.write('test')
>>> with open('test1','ab') as f:
f.write('koko')
>>> with open('test1','rb') as f:
f.read()
'testkoko'
Nota : usare 'a' non equivale ad aprirsi con 'w' e cercare fino alla fine del file - considera cosa potrebbe accadere se un altro programma aprisse il file e iniziasse a scrivere tra la ricerca e la scrittura. Su alcuni sistemi operativi, l'apertura del file con 'a' garantisce che tutte le tue scritture seguenti verranno aggiunte atomicamente alla fine del file (anche se il file cresce con altre scritture).
Qualche dettaglio in più su come funziona la modalità "a" ( testato solo su Linux ). Anche se cerchi indietro, ogni scrittura verrà aggiunta alla fine del file:
>>> f = open('test','a+') # Not using 'with' just to simplify the example REPL session
>>> f.write('hi')
>>> f.seek(0)
>>> f.read()
'hi'
>>> f.seek(0)
>>> f.write('bye') # Will still append despite the seek(0)!
>>> f.seek(0)
>>> f.read()
'hibye'
In effetti, la fopen
manpage afferma:
L'apertura di un file in modalità append (a come primo carattere della modalità) provoca tutte le successive operazioni di scrittura su questo flusso alla fine del file, come se precedesse la chiamata:
fseek(stream, 0, SEEK_END);
with
):Esempio: ( in un programma reale utilizzare with
per chiudere il file - consultare la documentazione )
>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
Lo faccio sempre
f = open('filename.txt', 'a')
f.write("stuff")
f.close()
È semplice, ma molto utile.
Probabilmente vuoi passare "a"
come argomento mode. Consulta i documenti per open () .
with open("foo", "a") as f:
f.write("cool beans...")
Esistono altre permutazioni dell'argomento mode per l'aggiornamento (+), troncamento (w) e binario (b) ma iniziare con just "a"
è la soluzione migliore.
file
ombreggia una funzione integrata. Non usarlo per le variabili.
file
non è più incorporato in Python 3. Anche in Python 2, viene usato molto raramente . L'apertura di un file è un'operazione comune. Va bene usare il file
nome qui su Python 2 e 3. Sapere quando essere incoerenti.
Python ha molte varianti rispetto alle tre modalità principali, queste tre modalità sono:
'w' write text
'r' read text
'a' append text
Quindi aggiungere a un file è facile come:
f = open('filename.txt', 'a')
f.write('whatever you want to write here (in append mode) here.')
Quindi ci sono le modalità che rendono il tuo codice meno righe:
'r+' read + write text
'w+' read + write text
'a+' append + read text
Infine, ci sono le modalità di lettura / scrittura in formato binario:
'rb' read binary
'wb' write binary
'ab' append binary
'rb+' read + write binary
'wb+' read + write binary
'ab+' append + read binary
quando usiamo questa linea open(filename, "a")
, ciò a
indica l'aggiunta del file, ciò significa consentire l'inserimento di dati extra nel file esistente.
Puoi semplicemente usare le seguenti righe per aggiungere il testo nel tuo file
def FileSave(filename,content):
with open(filename, "a") as myfile:
myfile.write(content)
FileSave("test.txt","test1 \n")
FileSave("test.txt","test2 \n")
È anche possibile aprire il file in r+
modalità e quindi impostare la posizione del file alla fine del file.
import os
with open('text.txt', 'r+') as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
Aprire il file in r+
modalità vi permetterà di scrivere ad altre posizioni di file, oltre alla fine, mentre a
e a+
la forza di scrittura fino alla fine.
se si desidera aggiungere a un file
with open("test.txt", "a") as myfile:
myfile.write("append me")
Abbiamo dichiarato la variabile myfile
per aprire un file denominato test.txt
. Open accetta 2 argomenti, il file che vogliamo aprire e una stringa che rappresenta i tipi di autorizzazione o operazione che vogliamo fare sul file
ecco le opzioni della modalità file
Descrizione della modalità 'r' Questa è la modalità predefinita. Apre il file per la lettura. 'w' Questa modalità Apre il file per la scrittura. Se il file non esiste, crea un nuovo file. Se il file esiste, tronca il file. 'x' Crea un nuovo file. Se il file esiste già, l'operazione non riesce. 'a' Apri il file in modalità append. Se il file non esiste, crea un nuovo file. 't' Questa è la modalità predefinita. Si apre in modalità testo. 'b' Si apre in modalità binaria. '+' Questo aprirà un file per la lettura e la scrittura (aggiornamento)
Il 'a'
parametro indica la modalità di aggiunta. Se non vuoi usarlo with open
ogni volta, puoi facilmente scrivere una funzione per farlo per te:
def append(txt='\nFunction Successfully Executed', file):
with open(file, 'a') as f:
f.write(txt)
Se vuoi scrivere altrove oltre alla fine, puoi usare 'r+'
† :
import os
with open(file, 'r+') as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
Infine, il 'w+'
parametro garantisce ancora più libertà. In particolare, consente di creare il file se non esiste, oltre a svuotare il contenuto di un file attualmente esistente.
Il modo più semplice per aggiungere più testo alla fine di un file sarebbe usare:
with open('/path/to/file', 'a+') as file:
file.write("Additions to file")
file.close()
Il a+
negli open(...)
Istruisce istruzione per aprire il file in modalità di aggiunta e permette lettura e l'accesso in scrittura.
Inoltre, è sempre buona norma utilizzare file.close()
per chiudere tutti i file aperti dopo averli utilizzati.
Ecco la mia sceneggiatura, che in pratica conta il numero di righe, quindi le aggiunge, quindi le conta di nuovo in modo da avere le prove che ha funzionato.
shortPath = "../file_to_be_appended"
short = open(shortPath, 'r')
## this counts how many line are originally in the file:
long_path = "../file_to_be_appended_to"
long = open(long_path, 'r')
for i,l in enumerate(long):
pass
print "%s has %i lines initially" %(long_path,i)
long.close()
long = open(long_path, 'a') ## now open long file to append
l = True ## will be a line
c = 0 ## count the number of lines you write
while l:
try:
l = short.next() ## when you run out of lines, this breaks and the except statement is run
c += 1
long.write(l)
except:
l = None
long.close()
print "Done!, wrote %s lines" %c
## finally, count how many lines are left.
long = open(long_path, 'r')
for i,l in enumerate(long):
pass
print "%s has %i lines after appending new lines" %(long_path, i)
long.close()