2016-12-13 57 views
2

我寫了代碼讀取URL和IP數據與IP作爲訪問的URL的關鍵。我試圖打印IP密鑰,然後每個網址的訪問次數。Python 3打印到文件創建錯誤的新行

問題是,當打印到我的文件時,在一些IP後面有一個新行。 這裏是代碼的輸出部分:

`for key, value in ipVisit.items():          
    outputF.write(key + " " + str(len(ipVisit[key]))+ '\n')` 

即使我增加或減少的關鍵和訪問的#之間的空格數第三輸出始終是在一行上唯一的一個。這裏是輸出:

194.33.212.111 
    28 
12.65.4.100 
    28 
205.23.104.49 31 
205.23.104.49 
    29 

我對循環做了些什麼愚蠢的事嗎?我怎樣才能解決這個問題?

+3

'key.rstrip()'和'STR(LEN(ipVisit [關鍵]))rstrip()可以'去掉字符串末尾的所有空格,包括換行符。 – TemporalWolf

回答

2

有一件事我發現是非常有益的,當寫入文件是完全忽略了write方法:

for key, value in ipVisit.items(): 
    print(key + " " + str(len(ipVisit[key])), file=outputF) 

這有輸出的可能,極大的副作用,如果outputF==None到stdout,我在過去已經利用了命令行程序(通過輸出文件與-或其他)。

使用打印,你會得到你熟悉的換行符語義,評論者的建議.rstrip()將處理任何殘留的錯誤換行符。

編輯:這也可能是明智的,以避免與+運算符建立字符串,而是使用format方法。此外,你必須在價值已經形成你的for循環,有沒有必要索引ipVisit再次:

for key, value in ipVisit.items(): 
    print('{} {}'.format(key, len(value)), file=outputF) 
    # or rstrip if there's still extra newlines 
    print('{} {}'.format(key.rstrip(), len(value)), file=outputF) # this will only work if you're sure `key` is a str 
+0

我試過你提供的代碼,但我仍然得到完全相同的輸出 – user6912880

+0

有趣!請參閱上面稍微更新的版本,其中提供了一些更具挑戰性的「rstrip」。如果它仍然發生,請更新您的問題,並使用鍵的確切值的一些示例 - 在ipVisit.keys()中使用'[repr(k)for k')',這樣我們就可以看到我們真正處理的是什麼。 (或者,也許'repr(ipVisit)') –