varios texto manejo leer gestion escribir ejercicios carpetas binarios archivos archivo python file virtual

python - texto - ¿Cómo hacer el procesamiento de archivos virtuales?



leer varios archivos python (4)

Así que para crear archivos utilizo lo siguiente:

fileHandle = open(''fileName'', ''w'')

luego escriba el contenido en el archivo, cierre el archivo. En el siguiente paso proceso el archivo. Al final del programa, termino con un "archivo físico" que necesito eliminar.

¿Hay alguna forma de escribir un archivo "virtual" que se comporte exactamente como uno "físico" (permitiendo que se manipule de la misma manera) pero no existe al final de la ejecución en Python?


Ahí está el módulo StringIO , lea su documentación , debería ser fácil de usar.

Tenga en cuenta, sin embargo, que esto mantendría los contenidos del "archivo" en la memoria. Si tiene demasiados datos, probablemente sería mejor crear un archivo real, por ejemplo, en / tmp, y eliminarlo después.


Es posible que desee considerar el uso de un tempfile.SpooledTemporaryFile que le ofrece lo mejor de ambos mundos en el sentido de que creará inicialmente un archivo virtual temporal basado en la memoria, pero cambiará automáticamente a un archivo físico basado en disco si los datos se guardan en la memoria. supera un tamaño especificado.

Otra característica io.BytesIO es que (cuando se utiliza la memoria), utilizará automáticamente un io.BytesIO o io.StringIO según el mode se esté utilizando, lo que le permite leer y escribir cadenas de Unicode o datos binarios (bytes).

La única parte difícil podría ser el hecho de que deberá evitar cerrar el archivo entre pasos, ya que al hacerlo se eliminará de la memoria o del disco. En su lugar, puede simplemente retroceder al principio con una llamada al método de seek(0) archivos seek(0) .

Cuando haya terminado completamente con el archivo y lo cierre, se eliminará automáticamente del disco si la cantidad de datos en él hizo que se transfiriera a un archivo físico.


Puedes usar StringIO como un archivo virtual, de la documentation oficial

import StringIO output = StringIO.StringIO() output.write(''First line./n'') print >>output, ''Second line.'' # Retrieve file contents -- this will be # ''First line./nSecond line./n'' contents = output.getvalue() # Close object and discard memory buffer -- # .getvalue() will now raise an exception. output.close()


Tienes StringIO y BytesIO en el módulo io .

StringIO comporta como un archivo abierto en modo texto: leer y escribir cadenas Unicode (equivalente a abrir un archivo con io.open(filename, mode, encoding=''...'') ), y BytesIO comporta como un archivo abierto en binario mode ( mode=''[rw]b'' ), y puede leer bytes de escritura.

Python 2:

In [4]: f = io.BytesIO(''test'') In [5]: type(f.read()) Out[5]: str In [6]: f = io.StringIO(u''test'') In [7]: type(f.read()) Out[7]: unicode

Python 3:

In [2]: f = io.BytesIO(b''test'') In [3]: type(f.read()) Out[3]: builtins.bytes In [4]: f = io.StringIO(''test'') In [5]: type(f.read()) Out[5]: builtins.str