繁体   English   中英

在python中以CSV比较数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM