[英]Comparing data in a CSV in python
我正在使用python 2.7从CSV文件中清除一些数据,然后再将其插入MySQL数据库。
每行都是带有时间戳的用户条目。
在将数据发送到数据库之前,我想检查CSV中是否存在重复的行(具有相同用户名的两行),然后使用计时器(位于同一行)检查要保留的行。
# set up data container
data = []
# read csv file
with open(file, 'rU') as f:
# create file reader
reader = csv.reader(f)
# skip first row (headers)
next(reader)
# gather data in a table
for row in reader:
data.append(row)
我想我对比较2d数组中的项目感到困惑...我知道用户名在data[][1]
,而计时器(int)在data[][52]
。
我试图创建一个像这样的新列表:
usernames = []
cleaner_list = data
for row in data:
if row[1] is in usernames:
# dupe
else:
usernames.append(row[2])
但是,当尝试像这样比较数据时,我一直超出范围:
if row[1] is in usernames:
if row[52] > usernames[row[2]][52]:
# delete row[52] from cleaner_data
else:
# delete the equivalent row in usernames from cleaner_data
我觉得我想得太过分了,但是我不能使用set
因为我需要数据保持一致。 我曾考虑创建某种类型的唯一用户名的枚举列表,并使用它来过滤CSV列,但是当我发现重复的行并需要在删除前检查其计时器时,我不知道如何保持对行的正确引用。 任何帮助将非常感激!
我将执行以下操作:保留具有相关最后时间戳记的用户字典。 如果在扫描CSV时发现较新的内容,请替换旧值。
cleaner_data = {}
for row in data:
if row[1] not in cleaner_data: # user name not yet seen: add
cleaner_data[row[1]] = row
else:
if row[52] > cleaner_data[row[1]][52]: # already seen, but newer timestamp: replace
cleaner_data[row[1]] = row
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.