2011-08-20 25 views
9

Abrí un archivo de 8   MB en Python, porque quería cambiar por lotes varios tipos de nombres de archivos. Revisé y cargué el archivo en una cadena y usé el método de cadena reemplazar para reemplazar todo. Entonces noté que solo la mitad del archivo estaba siendo reemplazado; como si Python no estuviera abriendo completamente el archivo.¿Tamaño máximo de un archivo que Python puede abrir?

¿Existe alguna clase de límite de tamaño de cadena o límite máximo de tamaño de archivo en el que debo jugar dentro de los límites de Python?

Consulte el código en Python search and replace not replacing properly.

He cambiado al código sugerido. El búfer es un archivo HTML 8   MB que tiene más de 150k líneas. El código de reemplazo funciona perfectamente; es solo que no está reemplazando todo. O por ejemplo un error que es un dolor es:

Cuando intento reemplazar la cadena ff10 por FF-10, se cambiará a FF-010.

+5

Puede abrir un archivo de cualquier tamaño, pero cuando lee todo el archivo, MemoryOverflow puede ocurrir ya que el sistema de 32 bits solo puede asignar 2GB por proceso o puede que no tenga suficiente memoria. –

+3

Muestra el código que te está dando el problema, de esa manera puedes obtener una respuesta más útil que otra que simplemente te diga si tu conjetura es correcta o no. :) –

+0

Agregué un enlace a mi código – nobody

Respuesta

14

No, no hay un máximo alcanzable en el tamaño de un archivo que Python puede abrir. 8   MB es diminuto en términos modernos. Cometiste un error en alguna parte.

La gente carga regularmente gigabytes de datos en la memoria. Dependiendo de la RAM de su computadora, ya sea un sistema operativo de 64 o 32 bits y un procesador, el máximo práctico para usted puede estar entre 1   GB antes de obtener un MemoryError.

Como prueba, acabo de cargar un archivo 350   MB en una cadena. Solo tardó unos segundos. Luego lo escribí nuevamente en un archivo. Eso tomó un poco más de tiempo. Luego compré el archivo. Los dos son idénticos.

Python no tiene problemas con cadenas grandes, hasta que llegue al límite de su RAM, sistema operativo o procesador.

Usted dice que "revisó y cargó el archivo en una cadena" - eso suena como el primer lugar donde podría haber cometido un error. Para cargar un archivo en una cadena, simplemente haz fileobject.read(). Si lo hiciste de otra manera, ese podría ser el problema.

+0

¿Qué pasa con las cadenas? – nobody

+0

@nobody mira mi comentario en tu pregunta –

+0

Hice una prueba y agregué los resultados a mi respuesta. – agf

Cuestiones relacionadas