2013-04-17 27 views
0

我試圖輸出語句在文件中在的格式:readlines方法輸出內的所有句子for循環

線1:第一句,
第2行:第二句,
第3行:第三一句話,

但我輸入的代碼是回饋像這樣:

線1:所有的句子中,
線2:所有的句子中,

我不知道是否有readline的問題,或者如果它在for循環中,任何人可以幫助?我已經包括以下

import re, sys 

f = open('findallEX.txt', 'r') 

lines = f.readlines() 

for l in lines: 
    sys.stdout.write('line %s: %s' %(ii, lines)) 

    ii = ii + 1 

print l 
+1

僅供參考,Python有一個'+ ='運營商 – ThiefMaster

回答

1

改變循環的腳本:

for l in lines: 
    sys.stdout.write('line %s: %s' %(ii, l)) 
    ii = ii + 1 

變量「線」是行的列表,你可以使用「爲升的線」旅遊每一行它。可變「l」意味着一條線。

+0

感謝您的幫助!現在工作! – user2290969

+0

@ user2290969我很高興看到我的代碼有用! – Sheng

3

對於它的價值,你的代碼可以更簡單地寫:

with open('findallEX.txt') as f: 
    for ii,line in enumerate(f): 
     sys.stdout.write('line %s: %s' %(ii,line)) 

with聲明是這樣做的以下一個奇特的方式:

f = open(...) 
#stuff inside with block 
f.close() 

另外,請請注意,您可以直接迭代文件對象。 readlines()已棄用(並在python3.x中刪除)。最後,python提供了enumerate函數用於在迭代時保持計數器。如果您在使用ii進行實際定義之前進行復制/粘貼,則這也將刪除您的代碼所具有的NameError


其實,with確實比多了不少。例如,即使在代碼塊引發異常的情況下,它也確保您的文件得到正確關閉。請參閱Martijn的評論以獲得更正確的翻譯。

+1

這是一個很花哨的做'f = None'的方法,'try:f = open(...)'後面跟着'finally:','如果f不是None:f.close()',它。 :-) –

+0

@MartijnPieters - 我想這很公平,但我試圖用*簡單的術語來解釋OP的好處(因此答案適用於形容詞「有用」)。 – mgilson