El módulo de archivo temporal de Python

    Introducción

    Los archivos temporales, o “tempfiles”, se utilizan principalmente para almacenar información intermedia en el disco de una aplicación. Estos archivos se crean normalmente para diferentes propósitos, como una copia de seguridad temporal o si la aplicación está tratando con un gran conjunto de datos más grande que la memoria del sistema, etc. Idealmente, estos archivos se encuentran en un directorio separado, que varía en diferentes sistemas operativos, y el El nombre de estos archivos es único. Los datos almacenados en archivos temporales no siempre son necesarios después de que se cierra la aplicación, por lo que es posible que desee eliminar estos archivos después de su uso.

    Python proporciona un módulo conocido como archivo temporal, lo que facilita la creación y el manejo de archivos temporales. Este módulo proporciona algunos métodos para crear archivos y directorios temporales de diferentes formas. tempfile resulta útil siempre que desee utilizar archivos temporales para almacenar datos en un programa Python. Echemos un vistazo a un par de ejemplos diferentes sobre cómo tempfile se puede utilizar el módulo.

    Crear un archivo temporal

    Suponga que su aplicación necesita un archivo temporal para usar dentro del programa, es decir, creará un archivo, lo usará para almacenar algunos datos y luego lo eliminará después de su uso. Para lograr esto, podemos utilizar el TemporaryFile() función.

    Esta función creará un archivo temporal al predeterminado tempfile ubicación. Esta ubicación puede ser diferente entre sistemas operativos. La mejor parte es que el archivo temporal creado por TemporaryFile() se eliminará automáticamente cada vez que se cierre el archivo. Además, no crea ninguna referencia a este archivo en la tabla del sistema de archivos del sistema. Esto lo hace privado para la aplicación actual, es decir, ningún otro programa podrá abrir el archivo.

    Echemos un vistazo al siguiente programa de Python para ver cómo funciona:

    import tempfile #1
    
    print("Creating one temporary file...")
    
    temp = tempfile.TemporaryFile() #2
    
    try:
        print("Created file is:", temp) #3
        print("Name of the file is:", temp.name) #4
    finally:
        print("Closing the temp file")
        temp.close() #5
    

    Imprimirá la siguiente salida:

    $ python3 temp-file.py
    Creating one temporary file...
    Created file is: <_io.BufferedRandom name=4>
    Name of the file is: 4
    Closing the temp file
    
    • Para crear un archivo temporal en Python, debe importar el tempfile módulo.
    • Como se explicó anteriormente, hemos creado el archivo temporal usando el TemporaryFile() función.
    • En la salida, puede ver que el objeto creado en realidad no es un archivo, es un objeto similar a un archivo. Y el mode parámetro (no se muestra en nuestro ejemplo) del archivo creado es w+b, es decir, puede leer y escribir sin estar cerrado.
    • El archivo temporal creado no tiene nombre.
    • Finalmente, cerramos el archivo usando el close() método. Será destruido después de que se cierre.

    Una cosa que debemos señalar es que el archivo creado con el TemporaryFile() La función puede tener o no un nombre visible en el sistema de archivos. En Unix, la entrada de directorio para el archivo se elimina automáticamente después de que se crea, aunque esto no es compatible con otras plataformas. Normalmente TemporaryFile() es la forma ideal de crear un área de almacenamiento temporal para cualquier programa en Python.

    Crear un archivo temporal con nombre

    En nuestro ejemplo anterior, hemos visto que el archivo temporal creado usando el TemporaryFile() La función es en realidad un objeto similar a un archivo sin un nombre de archivo real. Python también proporciona un método diferente, NamedTemporaryFile(), para crear un archivo con un nombre visible en el sistema de archivos. Aparte de proporcionar un nombre al archivo temporal, NamedTemporaryFile() funciona igual que TemporaryFile(). Ahora usemos el mismo ejemplo anterior para crear un archivo temporal con nombre:

    import tempfile
    
    print("Creating one named temporary file...")
    
    temp = tempfile.NamedTemporaryFile()
    
    try:
        print("Created file is:", temp)
        print("Name of the file is:", temp.name)
    finally:
        print("Closing the temp file")
        temp.close()
    

    La ejecución de este código imprimirá una salida similar a la siguiente:

    $ python3 named-temp-file.py
    Creating one named temporary file...
    Created file is: <tempfile._TemporaryFileWrapper object at 0x103f22ba8>
    Name of the file is: /var/folders/l7/80bx27yx3hx_0_p1_qtjyyd40000gn/T/tmpa3rq8lon
    Closing the temp file
    

    Entonces, el archivo creado en realidad tiene un nombre esta vez. La ventaja de NamedTemporaryFile() es que podemos guardar el nombre de los archivos temporales creados y usarlos más tarde antes de cerrarlos o destruirlos. Si el delete el parámetro está establecido en False, luego podemos cerrar el archivo sin que se destruya, lo que nos permite volver a abrirlo más tarde.

    Proporcionar un sufijo o prefijo al nombre

    A veces necesitamos agregar un prefijo o sufijo al nombre de un archivo temporal. Nos ayudará a identificar todos los archivos temporales creados por nuestro programa.

    Para lograr esto, podemos usar el mismo NamedTemporaryFile función definida anteriormente. Lo único que necesitamos agregar son dos parámetros adicionales al llamar a esta función: suffix y prefix

    import tempfile
    
    temp = tempfile.NamedTemporaryFile(prefix="dummyPrefix_", suffix="_dummySuffix")
    
    try:
        print("Created file is:", temp)
        print("Name of the file is:", temp.name)
    finally:
        temp.close()
    

    Al ejecutar este código, se imprimirá el siguiente resultado:

    $ python3 prefix-suffix-temp-file.py
    Created file is: <tempfile._TemporaryFileWrapper object at 0x102183470>
    Name of the file is: /var/folders/tp/pn3dvz_n7cj7nfs0y2szsk9h0000gn/T/dummyPrefix_uz63brcp_dummySuffix
    

    Entonces, si pasamos los dos argumentos adicionales suffix y prefix al NamedTemporaryFile() función, los agregará automáticamente al principio y al final del nombre del archivo.

    Encontrar la ubicación predeterminada de los archivos temporales

    los tempfile.tempdir La variable contiene la ubicación predeterminada para todos los archivos temporales. Si el valor de tempdir es None o desarmado, Python buscará una lista estándar de directorios y conjuntos tempdir al primer valor de directorio, pero solo si el programa que realiza la llamada puede crear un archivo en él. La siguiente es la lista de directorios que analizará, en este orden:

    • El directorio nombrado por la variable de entorno TMPDIR.
    • El directorio nombrado por la variable de entorno TEMP.
    • El directorio nombrado por la variable de entorno TMP
    • Directorios específicos de la plataforma:
    • En Windows, C: TEMP, C: TMP, TEMP y TMP, en el mismo orden.
    • En otras plataformas, / tmp, / var / tmp y / usr / tmp, en el mismo orden.
    • El directorio de trabajo actual.

    Para averiguar la ubicación predeterminada de los archivos temporales, podemos llamar tempfile.gettempdir() método. Devolverá el valor de tempdir si no es None. De lo contrario, primero buscará la ubicación del directorio siguiendo los pasos mencionados anteriormente y luego devolverá la ubicación.

    import tempfile
    
    print("Current temp directory:", tempfile.gettempdir())
    
    tempfile.tempdir = "/temp"
    
    print("Temp directory after change:", tempfile.gettempdir())
    

    Si va a ejecutar el programa anterior, imprimirá una salida similar a la siguiente:

    $ python3 dir-loc-temp-file.py
    Current temp directory: /var/folders/tp/pn3dvz_n7cj7nfs0y2szsk9h0000gn/T
    Temp directory after change: /temp
    

    Puede ver que la primera ubicación del directorio temporal es la ubicación del directorio proporcionada por el sistema y el segundo directorio temporal tiene el mismo valor que el que hemos definido.

    Lectura y escritura de datos de archivos temporales

    Hemos aprendido cómo crear un archivo temporal, crear un archivo temporal con un nombre y cómo crear un archivo temporal con un sufijo y / o prefijo. Ahora, intentemos comprender cómo leer y escribir datos desde un archivo temporal en Python.

    Leer y escribir datos desde un archivo temporal en Python es bastante sencillo. Para escribir, puede utilizar el write() método y para leer, puede utilizar el read() método. Por ejemplo:

    import tempfile
    
    temp = tempfile.TemporaryFile()
    
    try:
        temp.write(b'Hello world!')
        temp.seek(0)
    
        print(temp.read())
    finally:
        temp.close()
    

    Esto imprimirá la salida como b'Hello world!' desde el write() El método toma datos de entrada en bytes (de ahí el b prefijo en la cadena).

    Si desea escribir datos de texto en un archivo temporal, puede utilizar el writelines() método en su lugar. Para usar este método, necesitamos crear el archivo temporal usando w+t modo en lugar del predeterminado w+b modo. Para hacer esto, un mode param se puede pasar a TemporaryFile() para cambiar el modo del archivo temporal creado.

    import tempfile
    
    temp = tempfile.TemporaryFile(mode="w+t")
    
    try:
        temp.writelines("Hello world!")
        temp.seek(0)
    
        print(temp.read())
    finally:
        temp.close()
    

    A diferencia del ejemplo anterior, imprimirá “Hello World” como salida.

    Crear un directorio temporal

    Si su programa tiene varios archivos temporales, puede ser más conveniente crear un directorio temporal y poner todos sus archivos temporales dentro de él. Para crear un directorio temporal, podemos usar el TemporaryDirectory() función. Después de cerrar todos los archivos temporales, debemos eliminar el directorio manualmente.

    import tempfile
    
    with tempfile.TemporaryDirectory() as tmpdirname:
        print('Created temporary directory:', tmpdirname)
    
    # Both the directory and its contents have been deleted
    

    Imprimirá la siguiente salida:

    $ python3 mk-dir-temp-file.py
    Created temporary directory: /var/folders/l7/80bx27yx3hx_0_p1_qtjyyd40000gn/T/tmpn_ke7_rk
    

    Crear un directorio y un archivo temporales seguros

    Mediante el uso mkstemp(), podemos crear un archivo temporal de la manera más segura posible. El archivo temporal creado con este método solo se puede leer y escribir mediante el ID de usuario que lo creó. Podemos pasar prefix y suffix argumentos para agregar prefijo y sufijo al nombre del archivo creado. De forma predeterminada, abre el archivo en modo binario. Para abrirlo en modo texto, podemos pasar text=True como argumento de la función. diferente a TemporaryFile(), el archivo creado por mkstemp() no se elimina automáticamente después de cerrarlo.

    Como puede ver en el ejemplo siguiente, el usuario es responsable de eliminar el archivo.

    import tempfile
    import os
    
    temp_directory = tempfile.TemporaryDirectory()
    
    print("Directory name:", temp_directory)
    
    os.removedirs(temp_directory)
    
    $ python3 mk-secure-dir-temp-file.py
    Directory name: /var/folders/tp/pn3dvz_n7cj7nfs0y2szsk9h0000gn/T/tmpf8f6xc53
    

    Similar a mkstemp(), podemos crear un directorio temporal de la manera más segura posible usando mkdtemp() método. Y de nuevo, como mkstemp(), también es compatible prefix y suffix argumentos para agregar un prefijo y un sufijo al nombre del directorio.

    Conclusión

    En este artículo hemos aprendido diferentes formas de crear archivos y directorios temporales en Python. Puede utilizar archivos temporales en cualquier programa de Python que desee. Pero asegúrese de eliminarlo si el método particular utilizado no lo elimina automáticamente por sí solo. También tenga en cuenta que el comportamiento puede ser diferente entre los sistemas operativos, como los nombres de los directorios de salida y los nombres de los archivos.

    Todas estas funciones que hemos explicado anteriormente funcionan con muchos argumentos diferentes, aunque no hemos cubierto en detalle qué tipo de argumentos toma cada función. Si desea obtener más información sobre tempfile módulo, deberías revisar Python 3 documentación oficial.

     

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *