0

URL のリストを読み取り、それぞれをurlopenで個別に開くPythonコードを実行しています。一部の URL はリスト内で繰り返されます。リストの例は次のようになります。

  • www.example.com/page1
  • www.example.com/page1
  • www.example.com/page2
  • www.example.com/page2
  • www.example.com/page2
  • www.example.com/page3
  • www.example.com/page4
  • www.example.com/page4
  • [...]

一意の URL がコードによって以前に開かれた回数を教えてくれるカウンターを実装する方法があるかどうかを知りたいです。リスト内の各 URL に対して太字で示されているものを返すカウンターを取得したいと考えています。

  • www.example.com/page1 : 0
  • www.example.com/page1 : 1
  • www.example.com/page2 : 0
  • www.example.com/page2 : 1
  • www.example.com/page2 : 2
  • www.example.com/page3 : 0
  • www.example.com/page4 : 0
  • www.example.com/page4 : 1

ありがとう!

4

3 に答える 3

0

ioStringIO簡単にするために使用します。

import io
fin = io.StringIO("""www.example.com/page1
www.example.com/page1
www.example.com/page2
www.example.com/page2
www.example.com/page2
www.example.com/page3
www.example.com/page4
www.example.com/page4""")

を使用しておりますcollections.Counter

from collections import Counter
data = [line.strip() for line in f]
counts = Counter(data)
new_data = []
for line in data[::-1]:
    counts[line] -= 1
    new_data.append((line, counts[line]))
for line in new_data[::-1]:
    fout.write('{} {:d}\n'.format(*line))

結果は次のとおりです。

fout.seek(0)
print(fout.read())

www.example.com/page1 0
www.example.com/page1 1
www.example.com/page2 0
www.example.com/page2 1
www.example.com/page2 2
www.example.com/page3 0
www.example.com/page4 0
www.example.com/page4 1

編集

一度に1行しか必要ないため、大きなファイルで機能する短いバージョン:

from collections import defaultdict
counts = defaultdict(int)

for raw_line in fin:
    line = raw_line.strip() 
    fout.write('{} {:d}\n'.format(line, counts[line]))
    counts[line] += 1
于 2013-06-08T01:25:35.240 に答える
0

collections.defaultdict()オブジェクトを使用します。

from collections import defaultdict

urls = defaultdict(int)

for url in url_source:
    print '{}: {}'.format(url, urls[url])

    # process

    urls[url] += 1
于 2013-06-08T01:25:52.770 に答える
-2

私はあなたがそのようにすることはできないと思います。リスト内の重複を削除します。

于 2013-06-08T01:13:22.200 に答える