2012-11-17 52 views
1

我有一個列表,pList。我想將它保存到文本(.txt)文件中,以便列表中的每個元素都保存在文件的新行中。我怎樣才能做到這一點?如何將每個元素的列表保存在.txt文件中,每行一個?

這是我有:

def save(): 
    import pickle 
    pList = pickle.load(open('primes.pkl', 'rb')) 
    with open('primes.txt', 'wt') as output: 
     output.write(str(pList)) 
    print "File saved." 

然而,該列表保存在該文件只有一行。 我想要它,所以每一個數字(它只包含整數)被保存在一個新的行。

例子:

pList=[5, 9, 2, -1, 0] 
#Code to save it to file, each object on a new line 

所需的輸出:

5 
9 
2 
-1 
0 

我如何去這樣做呢?

回答

6

只需打開你的文件,加入你想要的分隔符列表,然後打印出來。

outfile = open("file_path", "w") 
print >> outfile, "\n".join(str(i) for i in your_list) 
outfile.close() 

由於列表包含整數,因此需要進行轉換。 (感謝通知,Ashwini Chaudhary)。

不需要創建臨時列表,因爲生成器是通過連接方法迭代的(再次感謝Ashwini Chaudhary)。

+1

列表包含整數,所以'加入()'調用將在這裏拋出'TypeError'。 'TypeError:sequence item 0:expected string,int found' –

+1

''''''在join()'內部不需要'''''\ n「.join(str(i)for i in your_list)' –

+1

''printfile'''outfile.write'可以在py2k和py3k上運行嗎? – mgilson

0

參考這個答案得到一個功能,增加了一個項目,以新的線給定文件

https://stackoverflow.com/a/13203890/325499

def addToFile(file, what): 
    f = open(file, 'a').write(what+"\n") 

所以對於你的問題,而不是僅僅通過列表中的文件,您需要遍歷列表。

for item in pList: 
    addToFile(item) 
+0

我不認爲有必要定義這樣的額外功能,並且打開和關閉列表中的每個項目的文件都會花費太多的I/O操作。 –

5

您可以使用mapstr這裏:

pList = [5, 9, 2, -1, 0] 
with open("data.txt", 'w') as f: 
    f.write("\n".join(map(str, pList))) 
相關問題