Sto riscontrando un problema che non ho visto nessuno su StackOverflow o addirittura su google.Python non legge tutto il file di testo
Il mio obiettivo principale è di essere in grado di sostituire le occorrenze di una stringa nel file con un'altra stringa. C'è un modo lì per essere in grado di accedere a tutte le righe nel file.
Il problema è che quando provo a leggere un grande file di testo (1-2 GB) di testo, Python legge solo un sottoinsieme di esso.
Per esempio, io farò davvero un semplice comando come:
newfile = open("newfile.txt","w")
f = open("filename.txt","r")
for line in f:
replaced = line.replace("string1", "string2")
newfile.write(replaced)
E scrive solo i primi 382 MB del file originale. Qualcuno ha riscontrato questo problema in precedenza?
ho provato alcune soluzioni diverse come l'utilizzo:
import fileinput
for i, line in enumerate(fileinput.input("filename.txt", inplace=1)
sys.stdout.write(line.replace("string1", "string2")
ma ha lo stesso effetto. Né la lettura del file in blocchi come l'utilizzo di
ho ristretto la scelta per lo più probabile essere una lettura in problema e non un problema di scrittura perché avviene semplicemente per stampare linee. So che ci sono più linee. Quando lo apro in un editor di testo completo come Vim, posso vedere quale dovrebbe essere l'ultima riga, e non è l'ultima riga stampata da python.
Qualcuno può offrire consigli o cose da provare?
Attualmente sto usando una versione a 32 bit di Windows XP con 3,25 GB di RAM, e l'esecuzione di Python 2.7
* Edit soluzione trovata (Grazie Lattyware). L'utilizzo di un Iterator
def read_in_chunks(file, chunk_size=1000):
while True:
data = file.read(chunk_size)
if not data: break
yield data
La lettura riga per riga con un iteratore dovrebbe essere un'operazione pigra, quindi dovrebbe funzionare indipendentemente dalla dimensione del file. Anche se non dovrebbe influenzare la tua situazione, dovrai anche usare '' with'' quando apri i file - è una buona pratica che gestire la chiusura delle eccezioni correttamente. –
Ha funzionato alla grande! Grazie mille. * modifica: ho provato a postare il codice iteratore qui, ma non sarebbe stato formattato, quindi l'ho aggiunto al post originale. – user1297872
Hai provato con un file di testo di dimensioni diverse? C'è qualcosa di strano con il file 382mb - un personaggio strano che viene trattato come la fine del file? – neil