0

テキスト ファイル内の大量のドメイン リストからサブドメインを削除しようとしています。スクリプトは機能しますが、リストの最後のドメインに対してのみ機能します。問題がループ内にあることはわかっていますが、正確な問題を特定することはできません。助けてくれてありがとう:)

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" を取ります。唯一の問題は、リスト内のすべてのドメインに対してこれを実行するわけではなく、最後のドメインのみです。

4

3 に答える 3

2

各ループ反復で t を上書きしているため、当然、最後の反復からの値のみが t に残ります。代わりに、list.append を使用して文字列をリスト内に配置します。

于 2013-01-12T18:39:47.850 に答える
2

あなたが望むのは、古いリストの要素を変更することによって、新しいリストを構築することです.幸いなことに、Pythonにはリスト内包表記があり、この仕事に最適です.

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

これは、リストを作成して for ループでリストに項目を追加するのとまったく同じように動作しますが、より高速で読みやすくなります。それらの使用方法の詳細については、上記のリンク先のビデオを見ることをお勧めします。

file.read()全体を 1 つの大きな文字列として読み取ることに注意してください。おそらく、ファイルの行をループすることでした。これは、ファイル自体をループするだけで実行できます。現在のループは、行ではなく、ファイルの個々の文字をループします。

于 2013-01-12T18:40:06.120 に答える
1

これを試してみてください。可読性が向上します。

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

t = []

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

print t
于 2013-01-12T18:54:40.920 に答える