2010-09-29 23 views
22

¿Cómo puedo escribir la siguiente lista:Python: Escribir una lista de tuplas en un archivo

[(8, 'rfa'), (8, 'acc-raid'), (7, 'rapidbase'), (7, 'rcts'), (7, 'tve-announce'), (5, 'mysql-im'), (5, 'telnetcpcd'), (5, 'etftp'), (5, 'http-alt')] 

a un archivo de texto con dos columnas (8 rfa) y muchas filas, de modo que tenga algo como esto:

8 rfa 
8 acc-raid 
7 rapidbase 
7 rcts 
7 tve-announce 
5 mysql-im 
5 telnetcpcd 

gracias de antemano

Respuesta

37
with open('daemons.txt', 'w') as fp: 
    fp.write('\n'.join('%s %s' % x for x in mylist)) 

Si desea utilizar str.format(), replace segunda línea con:

fp.write('\n'.join('{} {}'.format(x[0],x[1]) for x in mylist) 
+7

+1 Pero usted debe explicar lo que es fp. –

+3

'str.format' es la nueva expresión idiomática para formatear cadenas: http://www.python.org/dev/peps/pep-3101/. Aunque estoy seguro de que '%' durará muchas lunas ... =) – katrielalex

+2

también, 'str.format' tarda 2/3 del tiempo. – aaronasterling

18
import csv 
with open(<path-to-file>, "w") as the_file: 
    csv.register_dialect("custom", delimiter=" ", skipinitialspace=True) 
    writer = csv.writer(the_file, dialect="custom") 
    for tup in tuples: 
     writer.write(tup) 

El módulo csv es muy poderoso!

+0

+1 para 'con'.' Csv' es bueno pero opcional. –

+3

+1 como útil para crear csv, pero si esto no fuera 'writer.writerow (tup)'? – drexiya

+0

no parece funcionar en 3.6 –

0

Gracias chicos. Esta es la tercera forma en que se me ocurrió:

for number, letter in myList: 
    of.write("\n".join(["%s %s" % (number, letter)]) + "\n") 
+0

no lo hace necesita convertirlo en una lista para pasar a 'unirse'. Aparte de eso, es casi exactamente como la respuesta de Ignacio, por lo que probablemente debería aceptar la suya haciendo clic en la marca de verificación junto a la votación al lado de su respuesta. – aaronasterling

+0

Acepté su respuesta :) – Adia

4
open('filename', 'w').write('\n'.join('%s %s' % x for x in mylist)) 
Cuestiones relacionadas