2010-09-29 28 views
22

Jak mogę napisać następującą listę:Python: Zapisz listę krotek do pliku

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

do pliku tekstowego z dwoma kolumnami (8 rfa) i wielu rzędach, tak, że mam coś takiego:

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

góry dzięki

Odpowiedz

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

Jeśli chcesz użyć str.format(), wymienić 2 linia z:

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

+1 Ale trzeba wyjaśnić, co jest fp. –

+3

'str.format' jest nowym idiomem do formatowania ciągów: http://www.python.org/dev/peps/pep-3101/. Chociaż jestem pewien, że '%' będzie trwać dla wielu wielu księżyców ... =) – katrielalex

+2

również, 'str.format' zajmuje 2/3 czasu. – 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) 

Moduł csv jest bardzo silny!

+0

+1 dla 'z'.' Csv' jest ładne, ale opcjonalne –

+3

+1 jako użyteczne do tworzenia CSV, ale czy nie powinno to być 'writer.writerow (tup)'? – drexiya

+0

nie działa w 3.6 –

0

Dzięki chłopaki. Oto trzecia droga, że ​​wymyśliłem:

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

musisz zamienić go na listę, aby przejść do 'join' .Niektóre to, to prawie dokładnie tak jak odpowiedź Ignacio, więc powinieneś zaakceptować jego, klikając znacznik wyboru pod liczbą głosów obok jego odpowiedzi .. – aaronasterling

+0

Akceptowałem jego odpowiedź :) – Adia

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