2011-08-20 4 views
9

Ho aperto un file 8   MB in Python, perché volevo modificare in batch vari tipi di nomi di file. Sono passato e ho caricato il file in una stringa e ho usato il metodo stringa per sostituire tutto. Poi ho notato che solo la metà del file veniva sostituita; come se Python non stesse aprendo completamente il file.Dimensione massima di un file che Python può aprire?

C'è qualche tipo di limite per la dimensione della stringa o limite massimo per la dimensione del file che devo giocare entro i limiti di in Python?

Fare riferimento al codice in Python search and replace not replacing properly.

Sono stato modificato nel codice suggerito. Il buffer è un file HTML 8   MB che supera le 150 linee. Il codice sostitutivo funziona perfettamente; è solo che non sta sostituendo tutto. O per esempio un errore che è un dolore è:

Quando sto tentando di sostituire la stringa da FF10 a FF-10, sarà cambiato in FF-010.

+5

È possibile aprire un file con qualsiasi dimensione, ma quando si legge l'intero file, MemoryOverflow può verificarsi poiché il sistema 32Bit può allocare solo 2 GB per processo o potrebbe non avere memoria sufficiente. –

+3

Mostra il codice che ti dà il problema, in questo modo puoi ottenere una risposta più utile di una che ti dice semplicemente se la tua ipotesi è giusta o meno. :) –

+0

Aggiunto collegamento al mio codice – nobody

risposta

14

No, non esiste un massimo raggiungibile sulla dimensione di un file che Python può aprire. 8   MB è piccolo in termini moderni. Hai fatto un errore da qualche parte.

Le persone caricano regolarmente i dati gigabyte di dati. A seconda della RAM del tuo computer, che si tratti di sistema operativo e processore a 64 o 32 bit, il massimo pratico per te potrebbe essere compreso tra 1   GB prima di ottenere uno MemoryError.

Come test, ho appena caricato un file 350   MB in una stringa. Ci sono voluti solo pochi secondi. Ho quindi scritto di nuovo su un file. Ci è voluto un po 'di più. Ho quindi cancellato il file. I due sono identici.

Python non ha problemi con le stringhe grandi, fino a raggiungere il limite della RAM, del sistema operativo o del processore.

Si dice che "è stato eseguito e caricato il file in una stringa" - sembra il primo posto in cui si potrebbe aver commesso un errore. Per caricare un file in una stringa, basta fare fileobject.read(). Se l'hai fatto in un altro modo, questo potrebbe essere il problema.

+0

E le stringhe? – nobody

+0

@nobody vedi il mio commento sulla tua domanda –

+0

Ho fatto un test e ho aggiunto i risultati alla mia risposta. – agf