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 *