2013-01-12 41 views
0

我試圖剝離掉子域在文本文件中域的大名單中。該腳本可以工作,但僅適用於列表中的最後一個域。我知道問題出現在循環中,但無法查明問題。感謝您的幫助:)循環Python的拆分功能

with open ("domainlist.txt", "r") as datafile: 
s = datafile.read() 
for x in s: 
    t = '.'.join(s.split('.')[-2:]) 

print t 

這將採取「example.test.com」和「return test.com」。唯一的問題是它不會爲列表中的每個域執行此操作 - 只有最後一個。

+2

你不在循環中使用'x': – progo

+0

你的輸入文件是怎樣的? – ATOzTOA

回答

2

你需要的是建立一個新的列表,通過修改一箇舊的元素,幸運的是,Python有the list comprehension - 這項工作的完善。

with open("domainlist.txt", "r") as datafile: 
    modified = ['.'.join(x.split('.')[-2:]) for x in datafile] 

這的行爲與在for循環中創建列表並向其中添加項目完全相同,除了更快和更好閱讀外。我建議觀看上面鏈接的視頻以獲取更多關於如何使用它們的信息。

請注意,file.read()將整個事件作爲一個大字符串讀取,您想要的可能是循環遍歷文件的行,這只是通過循環遍歷文件本身來完成。個人字符的文件,而不是行您當前的循環迴路。

+0

謝謝!正是我在找:) –

2

您在每次循環迭代改寫T,所以自然只能從最後一次迭代停留在T的值。 INstead將該字符串放入list.append列表中。

1

嘗試了這一點。更好的可讀性。

with open ("domainlist.txt", "r") as datafile: 
s = datafile.readlines() 

t = [] 

for x in s: 
    t.append('.'.join(x.split('.')[-2:])) 

print t