2010-09-29 63 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但是你应该解释什么是FP。 – 2010-09-29 09:38:18

+3

'str.format'是格式化字符串的新成语:http://www.python.org/dev/peps/pep-3101/。虽然我确定'%'会持续很多很多的卫星...... =) – katrielalex 2010-09-29 09:38:55

+2

也是,'str.format'需要2/3的时间。 – aaronasterling 2010-09-29 11:00:28

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'很好但是可选。 – 2010-09-29 09:42:37

+3

+1对于创建csv有用,但是这不是'writer.writerow(tup)'? – drexiya 2013-10-09 15:18:09

+0

似乎不能在3.6 – 2018-02-20 15:53:30

0

谢谢你们。这里是我想出了第三条道路:

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

中工作,你不需要需要把它变成一个列表传递给'join',除此之外,它几乎和Ignacio的答案一样,所以你应该可以通过点击他的答案旁边的votecount下面的复选标记来接受他。 – aaronasterling 2010-09-29 11:12:07

+0

我确实接受了他的回答:) – Adia 2010-09-29 12:02:26

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