2017-03-06 6 views
0

コードで指定されている2つの列(IPとプラットフォーム)の対応する各値に対して、それらを連結し、この連結された文字列がcsvデータベース全体で発生する時間をカウントします。Python:対応するCSV行の値

このコードでは、現在、コマンドラインで1000行のデータを処理するのに約1時間かかるが、これはdouble-forループの結果であると思われる。それ以外の場合は、このdouble-forループを使用せずに、対応する各IPのプラットフォームをusers_country_platformリストにどのように追加できますか?

import sys 
import csv 
from collections import Counter 

users_country_platform = [] 
with open(sys.argv[1], 'r') as UserLog: 
    IPs = [row['client_ip_address'] for row in csv.DictReader(UserLog)] 
    UserLog.seek(0) 
    platforms = [row['platform'] for row in csv.DictReader(UserLog)] 
    for platform in platforms: 
     for IP in IPs: 
      if IP != 'NULL' and platform != 'NULL' or 'None': 
       users_country_platform.append(str(response.country.iso_code) + ', ' + platform) 

代替ソリューションは、出力形式になるように国のキーの中に部分配列を確立することです[:プラットフォーム:国のカウント]が、その後、私は別のカウント方法が必要だと思います。どちらの方法についてもアドバイスをいただければ幸いです。

答えて

1

enter image description here

私は非常に簡単な例を使用しますが、うまくいけば、あなたは以下を使用して、あなたのコードにそれを働かせることができます。上記のcsv形式を考えてみましょう。

これは、1つのループだけで2つの列のユニークな発生をカウントする方法を示しています。

+0

あなたの助けていただきありがとうございます。 –

+0

回答を受け入れることを検討しますか? –

+1

完了 - 申し訳ありませんが、私の最初の投稿はここにあります。 –

関連する問題