Python:对应的 CSV 行值
Python: Corresponding CSV Row Values
对于代码中指定的两列(IP 和平台)的每个对应值,我想将它们连接起来,然后计算这个连接字符串在整个 csv 数据库中出现的次数。
这段代码目前需要将近一个小时才能在命令行中遍历1000行数据,这似乎是双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)
另一种解决方案是在国家键内建立一个子数组,以便输出的形式为 [国家:平台:计数],但我认为我需要一种不同的计数方法。对这两种方法的建议将不胜感激。
我使用了一个非常简单的示例,但希望您可以使用下面的示例并将其应用到您的代码中。采用上面的 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
希望这展示了如何仅用一个循环计算两列的唯一出现次数!
对于代码中指定的两列(IP 和平台)的每个对应值,我想将它们连接起来,然后计算这个连接字符串在整个 csv 数据库中出现的次数。
这段代码目前需要将近一个小时才能在命令行中遍历1000行数据,这似乎是双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)
另一种解决方案是在国家键内建立一个子数组,以便输出的形式为 [国家:平台:计数],但我认为我需要一种不同的计数方法。对这两种方法的建议将不胜感激。
我使用了一个非常简单的示例,但希望您可以使用下面的示例并将其应用到您的代码中。采用上面的 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
希望这展示了如何仅用一个循环计算两列的唯一出现次数!