2010-09-29 4 views
22

Как можно написать следующий список:Python: Составьте список кортежей в файл

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

в текстовый файл с двумя колонками (8 rfa) и много строк, так что у меня есть что-то вроде этого:

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

заранее спасибо

ответ

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

Если вы хотите использовать str.format(), заменить 2-й линии с:

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

+1 Но вы должны объяснить, что Ф.П. есть. –

+3

'str.format' - новая идиома для форматирования строк: http://www.python.org/dev/peps/pep-3101/. Хотя я уверен, что '%' будет длиться для многих многих лун ... =) – katrielalex

+2

также, 'str.format' занимает 2/3 времени. – 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) 

csv модуль является очень мощным!

+0

+1 для 'с'.' Csv' является хорошим, но необязательным. –

+3

+1 полезен для создания csv, но если это не будет 'writer.writerow (tup)'? – drexiya

+0

, похоже, не работает в версии 3.6 –

0

Спасибо, ребята. Вот третий путь, который я придумал:

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

. нужно превратить его в список, чтобы перейти к 'join'. other then that, это почти так же, как ответ Игнасио, поэтому вы, вероятно, должны его принять, нажав галочку под номером голоса рядом с его ответом. – aaronasterling

+0

Я принял его ответ :) – Adia

4
open('filename', 'w').write('\n'.join('%s %s' % x for x in mylist)) 
Смежные вопросы