Estoy trabajando en un script de Python que necesita crear unos 50 archivos temporales distintos, que se anexan con frecuencia durante el transcurso del script y se fusionan al final. Estoy seguro de que el módulo tempfile
puede hacer lo que necesito, pero no he podido averiguar cómo leer la documentación.Cómo usar el tempfile.NamedTemporaryFile() de Python?
Quiero usar archivos temporales, en lugar de variables, para conservar la memoria del sistema, ya que estos fragmentos de datos crecen a medida que el script procesa decenas de miles de otros archivos.
El siguiente fragmento de código es el hack Actualmente estoy usando para crear estos archivos (untemporarily) en un directorio untemporary:
item = (string from another file) # string must id file for future use
tmpfile = 'tmpfiles/' + item
if item not in totalitems:
totalitems.add(item)
with open(tmpfile, 'w') as itemfile:
output = some stuff
tmpfile.write(output)
else:
with open(tmpfile, 'a') as itemfile:
output = different stuff
tmpfile.write(output)
Creo que lo que necesito es tempfile.NamedTemporaryFile()
. De acuerdo con documentation:
Ese nombre se puede recuperar del miembro de nombre del objeto de archivo.
Lamentablemente, no entiendo lo que eso significa. Solo necesito poder volver a llamar a cada archivo más tarde cuando vuelva a encontrar su "elemento" correspondiente en los archivos que estoy procesando. Supongo que esto es bastante directo y solo estoy siendo denso. En caso de que importe, tengo versiones de este script para Python 2.7.1 y 3.2.3. Solo necesito que uno o el otro trabaje; Creé ambos como un ejercicio de aprendizaje.
posible duplicado de [Mejor manera de generar nombres de archivo al azar en Python] (http://stackoverflow.com/questions/10501247/best-way- to-generate-random-file-names-in-python) – Joe
@Joe, Parte de esta pregunta parece ser un duplicado del hilo que ha vinculado. Parte de esto no es; ver el comentario debajo de la respuesta de Levon. – Gregory
¿Por qué necesita que se nombren estos archivos? Si no tienen nombre (se borraron previamente), hay menos errores en términos de limpieza. Simplemente puede almacenar el objeto tmpfile, no su nombre, y luego llamar a 'seek (0)' para ir al principio a estar listo para leer ... o mmap su contenido, o acceder de otra manera a su gusto. –