2016-12-13 5 views
2

私は訪問したURLのキーとしてIPを使ってurlとIPデータを読むコードを書いた。私はIPキーを印刷して、それぞれのURL訪問の回数を試行しています。Python 3がファイルに印刷して新しい行を作成する

問題は、ファイルに印刷するときに、いくつかのIPの後に新しい行があることです。ここ コードの出力部である:

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

Iが増減場合でもキーおよび訪問#第3の出力との間のスペースの数は常に1本のライン上に存在する唯一のものです。出力は次のとおりです。

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に出力する可能性-大きな副作用があり、どのI過去にコマンドラインプログラムを利用していた(出力ファイルを-または何かに渡す)。

印刷を使用すると、慣れ親しんだ改行セマンティクスが得られ、投稿者の提案.rstrip()は残った誤った改行文字を処理します。

EDIT:+演算子を使用して文字列を作成するのを避け、代わりに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'-ingを見てください。それでも問題が解決しない場合は、キーの正確な値のいくつかの例を使用して質問を更新してください。実際に処理していることを確認するには 'ipvisit.keys(k)の' repr(k)を使用してください。 (あるいは、おそらく 'repr(ipVisit)') –

関連する問題