2017-03-06 38 views
0

對於代碼中指定的兩列(IP和平臺)的每個對應值,我想將它們連接起來,然後計算此連接字符串在整個csv數據庫中出現的次數。Python:對應的CSV行值

此代碼目前需要幾乎一小時的時間才能通過命令行中的1000行數據,這似乎是雙for循環的結果。如果沒有別的,我怎樣才能將每個對應IP的平臺追加到users_country_platform列表中,而不使用這個double-for循環?

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格式,考慮以下因素:

import csv 
import os 
cwd = os.getcwd() 

counter = {} 
with open(cwd+'\\test.csv', 'rb') as file_in: 
    reader = csv.DictReader(file_in, restval=None, restkey=None, dialect='excel') 
    for row in reader: 
     conc = row['ip'] + row['platform'] 
     counter.setdefault(conc, 0) 
     counter[conc] += 1 

print counter 

希望這顯示瞭如何計算兩列的唯一OCCURENCES只有一個循環!

+0

感謝您的幫助,我得到了您的建議。 –

+0

考慮接受答案? –

+1

完成 - 對不起,我的第一篇文章在這裏。 –