2010-09-29 183 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)) 
相關問題