Escribiendo una lista de tuplas en un archivo de texto en Python

Tengo una lista de tuplas en el formato:

("some string", "string symbol", some number) 

Por ejemplo, ("Apples", "=", 10) . Necesito escribirlos en el archivo de salida, así:

 Apples = 10 

Estoy teniendo problemas con el método de escritura. ¿Cómo puede hacerse esto?

Puedes usar:

 for t in some_list: f.write(' '.join(str(s) for s in t) + '\n') 

donde f es tu file

 list_of_tuples = [('Apples', '=', 10), ('Oranges', '<', 20)] f = open('file.txt', 'w') for t in list_of_tuples: line = ' '.join(str(x) for x in t) f.write(line + '\n') f.close() 

Dada una lista de tuplas, abre un archivo en modo de escritura. Para cada tupla de la lista, convierte todos sus elementos en cadenas, los une por espacios para formar la cadena y escribe la cadena con una nueva línea en el archivo. Luego cierras el archivo.

Edición: No me di cuenta de que comenzaste con una lista de tuplas. Hizo cambios para reflejar eso.

 >>> data= ("Apples", "=", 10) >>> print " ".join(map(str, data)) Apples = 10 

Fácil. Asigne la tupla / lista a las cadenas, luego únalas con " " .

Nadie mencionó simplemente haciendo:

 with open('file_name', 'w') as f: for tuple in tuples: f.write('%s %s %s\n' % tuple) 

Esto tiene varios ups. Es más fácil comprender lo que está haciendo, el formato es dolorosamente obvio y fácil de modificar, y nunca se olvida de usar str (objeto).

La desventaja de esto en comparación con las soluciones de unión es que si la tupla cambia de tamaño, no funcionará con uno de los siguientes tracebacks:

 Traceback (most recent call last): File "", line 1, in  TypeError: not all arguments converted during string formatting Traceback (most recent call last): File "", line 1, in  TypeError: not enough arguments for format string 

(Intenta reproducirlos como un ejercicio.)

En mi opinión, si las tuplas no van a ser de tamaño variable, la versión más pirónica es la versión que se presenta aquí.

 import this #and decide for yourself :) 

Además, consulte los recursos para obtener más información (en orden de relevancia para el problema):

http://docs.python.org/library/stdtypes.html#string-formatting-operations

http://docs.python.org/library/string.html

http://www.python.org/dev/peps/pep-0292/

 lot = [('Apples', '=', 10), ('Oranges', '<', 20), ('Peaches','(Florida)','No stock')] with open('tototo.txt','w') as f: f.write( '\n'.join(' '.join(str(x) for x in tu) for tu in lot) ) 

La creación de todo el texto antes de escribirlo hace que la escritura en una sola pasada.
Siempre que el texto no sea de 25 GB de longitud ....

Tenga en cuenta que en Windows, si el modo es 'w' , el sistema operativo escribirá \ r \ n cada vez que debe escribir un \ n ;
Si desea que solo se escriba \ n , debe definir el modo como 'rb'

PD

Es 'wb' , no rb'

Editar 1

Cuando Python escribe en el disco en modo 'w' en Windows, el sistema operativo Windows escribe secuencias \ r \ n como finales de líneas cuando tiene líneas para escribir en un disco, y cuando tiene que escribir cadenas que contienen nuevas líneas, cualquiera que sea esta nuevas líneas, \ n solo o \ r \ n

Si, por cualquier capricho personal, o curiosidad, o convicción religiosa, o como un síntoma de sonambulismo, o para impresionar a su esposa, o para complacer a su niño caprichoso, o debido a un fantasma psicópata que vive en su computadora y chilla cada vez que un ortodoxo \ r \ n la nueva línea se escribe en el disco, o simplemente porque su algoritmo lo requiere ... sí, puede suceder que usted quiera escribir solo una nueva línea como \ n en un disco ... eso no es ciencia ficción, puede REALMENTE suceder, usted ahora ..... me pasó a mí, sí, créame o no, me enfrenté al hecho de que me vi obligado a escribir un \ n solo en un disco en Windows, sin ningún obstáculo. ¡Y el imprimátur complementario de algún papa pythonista! .... bueno, sí puede suceder, y luego, después de haberse bloqueado el cinturón de seguridad, PUEDE, sí podemos, ¡escriba una nueva línea en un disco en Windows! Sí sí sí, es posible y no una causa de condenación

Luego, solo en uno de estos casos, y si tiene la edad legal y todas sus capacidades mentales y no ha bebido cerveza ni vino en exceso, puede usar 'wb' para escribir nuevas líneas \ n solo en un disco en Windows.

¡Pero eso no es obligatorio! Permaneces en libertad de hacerlo o no

.

Otra cosa es que cuando Python lee archivos en modo 'r' , el Soporte de Nueva Línea Universal (ver PEP 278) está habilitado de manera predeterminada: consiste en el hecho de que todos los tipos de nuevas líneas encontradas por Python en un archivo se transforman en un solo carácter \ n .

Pero también puede suceder que necesite leer un archivo sin ninguna transformación de nuevas líneas. En este caso, en lugar de deshabilitar el Soporte Universal de Nueva Línea, puede leer un archivo en particular en el modo 'rb'

Pero NO ESTAS OBLIGADO y no incito a nadie a hacerlo o lo contrario. Usted hace lo que quiere, todas esas cosas ridículas es explicar algo útil para saber.

.

Editar 2

Intenté usar writelines () , pero no pensé usar% formating para agregar una nueva línea con sipmplicity.

Ahora que he visto la respuesta de Derek Litz, tengo una solución evidente:

 lot = [('Apples', '=', 10), ('Nuts', '<', 20), ('Peaches','(Florida)','No stock')] with open('tototo.txt','w') as f: f.writelines( '%s %s %s\n' % tu for tu in lot ) 

Solo si la longitud de las tuplas es 3 para todas las tuplas

Este ejemplo le permitirá recorrer una lista de tuplas y escribir cada tupla en una nueva línea en un archivo de texto. Tenga en cuenta que estoy usando Unicode en lugar de cadena:

 with open('filename.txt','w') as f: for tup in list_of_tuples: f.write( u" ".join(map(unicode,tup))+u"\n") 

Las respuestas anteriores asignan sus datos al formato de cadena primero, lo cual está bien si sus datos aún no están en formato Unicode.