2016-11-11 153 views
0

我在python中有一個非常基本的問題。我想分割下列列表中的項目並將其打印在文本文件中。蟒蛇for循環塊中的多行

import pandas as pd 
s = ['"9-6": 1', ' "15-4": 1', ' "12-3": 1', ' "8-4": 1', ' "8-5": 1', ' "8-1": 1'] 
print type(s) 
for i in s: 
    j = i.split(',') 
    with open("out.txt","w") as text_file: 
      text_file.write("{}".format(j)) 

但是,我的代碼只打印最後一個值。顯然,它並沒有將for循環塊中的最後一行取出來。任何人都可以指出我錯在哪裏?謝謝!

+0

我不明白你爲什麼要做'j = i.split(',')',你遍歷數組中的每個字符串,然後將每個字符串拆分成由逗號分隔的子字符串,但是任何字符串中都沒有逗號。 – mshindal

回答

1

您未附加值。你每次都在重寫。像這樣嘗試:

with open("out.txt","a+") as text_file: 

在這裏,我用「a +」替換了「w」。

全碼:

import pandas as pd 
s = ['"9-6": 1', ' "15-4": 1', ' "12-3": 1', ' "8-4": 1', ' "8-5": 1', ' "8-1": 1'] 
print type(s) 
for i in s: 
    j = i.split(',') 
    with open("out.txt","a+") as text_file: 
     text_file.write("{}".format(j)) 
0

每次打開out.txt與「W」選項的時候,它完全刪除該文件之前,你甚至寫什麼。您應該在for循環開始之前放置with語句,以便該文件僅打開一次。

+0

有道理!謝謝 –

0

你的for循環的每一次迭代,你截斷你的文件內容,即。 「清空文件」。這是因爲在使用開放模式w時,由於您已經在上一次迭代中創建了Python,所以Python隱式地截斷了該文件。這種行爲被記錄在Python 2.7:

[..] 'W'[是]寫[到文件](截斷如果它已經存在的文件)[..]

使用相反,選項a+附加到文件。 Python的2.7機制的文檔還指出這一點:

[..] [使用] '一' 的附加[..]

這意味着此:

...open('out.txt' 'w')...

應該是:

...open('out.txt', 'a')...