我有一个Excel文件,其值如此( - 作为分隔符)
14:32:01--500--TEST--USER
14:32:24--500--TEST--USER
14:32:31--500--TEST--USER2
14:34:06--200--TEST--USER2
14:34:15--200--TEST--USER2
14:41:25--342--TEST--USER3
这种情况持续了数千行(大约4000行),我想知道每分钟有多少不同的用户。因此,对于14:32分钟,将有2个不同的用户,并且对于14:34,只有一个用户(即使该分钟有两个用户,那里只有一个用户)。
所以我的python程序将打开excel作为系统参数,然后获取所有唯一的分钟(通过忽略时间戳的第二部分),然后生成一个字典,其值为每个唯一分钟的空字典。 / p>
然后我返回并遍历所有行,并尝试将每个用户附加到该分钟键,但是当我这样做时,它会将其附加到所有键...什么?
有人可以指出我正确的方向,或解释发生了什么?我知道我的代码很糟糕,并且有很多冗余(即多次循环同一个东西)然而我只是想让它工作
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.compat import range
from string import ascii_lowercase
import time
import datetime
import sys, os.path
import re
import math
import string
import json
import csv
minutes = []
unique_min_list = []
unique_min_dict = {}
data_book = load_workbook(filename = sys.argv[1], read_only=False)
data_sheet = data_book['merged']
def uniq(input):
output = []
for x in input:
if x not in output:
output.append(x)
return output
def iter_rows(sheet):
for row in sheet.iter_rows():
yield [cell.value for cell in row]
data = list((iter_rows(data_sheet)))
for rows in data:
date_val = str(rows[0])[:5]
minutes.append(date_val)
unique_min_list = uniq(minutes)
unique_min_dict = dict.fromkeys(unique_min_list, [])
print(str(unique_min_dict))
print(str(len(unique_min_dict)))
loop_count = 0
for rows in data:
if loop_count >= 10:
break
loop_count += 1
date_val = str(rows[0])[:5]
user = str(rows[3])
print(user)
if user not in unique_min_dict[date_val]:
unique_min_dict[date_val].append(user)
print(str(unique_min_dict))
time.sleep(5) #for debug purposes
for k, v in unique_min_dict.items():
unique_min_dict_x[k] = uniq(v)
unique_min_dict_x[k] = str(len(v))
with open('my_file.csv', 'w') as f:
[f.write('{0},{1}\n'.format(key, value)) for key, value in unique_min_dict.items()]