2017-06-09 45 views
2

說我有這樣的,每一個新的字母上一個新的行會開始一個文本文件:追加字符串列表中的for循環

-.H 
-.e 
-.l 
-.l 
-.o 

我想編寫代碼從每個文本中刪除一些數據線(在例子的情況下,我想刪除「 - 」中的每個字母的前面),然後串聯結果到一起形成:

Hello 

什麼是對這類問題的一般方法?我認爲它可能以下列方式解決:

f = open('hello.txt', 'r') 
logs = f.readlines() 
f.close() 
loglist = list(map(str.strip, logs)) 
newlist = [] 

for i in range (len(loglist)): 
    splitLetter = loglist[i].split('.') 
    letter = splitLetter[-1] 
    newlist.append(letter) 
    word = ''.join(newlist) 
    print word 

的問題是,雖然結果是一系列迭代:

H 
He 
Hel 
Hell 
Hello 

我只需要最後的結果。我如何獲得?

回答

1

與您現有的代碼的問題是,你每次迭代後打印。通過在for循環之外移動print語句,它將僅打印最後一次迭代。

f = open('hello.txt', 'r') 
logs = f.readlines() 
f.close() 
loglist = list(map(str.strip, logs)) 

word = ''.join(l.split('.')[-1] for l in loglist) 
print word 

只是爲了確保這個工程,我測試了它與下面的文本測試文件:

-.G 
-.o 
-.o 
-.d 
-.b 
-.y 
-.e 

,並得到以下結果:

Goodbye 
+0

好的,這應該是不言自明的。我現在在這裏問這個問題感覺很糟糕。:D有時大腦在長時間編碼後會停止正常工作。 –

+1

@kevin你可以在連接中刪除[],'''.join(l.split('。')[ - 1] for loglist)' – pramod

+0

@pramod thx!只是編輯以反映這種變化。 –

0

就移動打印的循環之外:

for i in range (len(loglist)): 
    splitLetter = loglist[i].split('.') 
    letter = splitLetter[-1] 
    newlist.append(letter) 

word = ''.join(newlist) 
print word 
+0

LOL @風靡一時,王后,事實兩個月後downvoted大家。 – Carcigenicate

0
for i in range (len(loglist)): 
    splitLetter = loglist[i].split('.') 
    letter = splitLetter[-1] 
    newlist.append(letter) 
word = ''.join(newlist) 
print word 

word = '' 
for i in range (len(loglist)): 
    splitLetter = loglist[i].split('.') 
    letter = splitLetter[-1] 
    word += letter 
print word 
0
word = ''.join([ l.split('.')[-1] for l in loglist ]) 

而不是整個for循環應該做的。

+0

這個問題的解決方案非常好。我仍然需要循環,因爲我打算應用條件。 –

+0

您也可以在列表理解中使用條件('if'子句)。除非你需要分配臨時變量,否則分配不能在列表解析中完成。 –

0

您正在每一步打印結果。只需在for循環後打印即可。

您可以使用生成器表達式更短節目:

with open('hello.txt') as logs: 
    word = ''.join(l.strip().split('.')[-1] for l in logs) 
print word 
0

使用with ... as聲明讓您擺脫關閉文件。它將在該塊的結尾處自動關閉。

然後,在一個單行: word = ''.join([l.strip()[-1]] for l in logs)

你並不需要,如果你之前剝去字符串分割字符串。你可以肯定這封信將在最後一個索引處。

的完整代碼

with open('hello.txt', 'r') as logs: 
    word = ''.join([l.strip()[-1]] for l in logs) 
print word