【问题标题】:Python 2.7: Remove duplicates from csv based on conditionsPython 2.7:根据条件从 csv 中删除重复项
【发布时间】:2020-07-11 22:47:28
【问题描述】:

我有一个格式如下的 csv 文件:

Username,Name,Phone,Email,Country,Login
John23,John Doe,99999999,johndoe@yahoo.com,Italy,1585589097.787715
John23,John Doe,99999999,johndoe@yahoo.com,Italy,1585652050.037622

我想删除包含重复“用户名”的行,只保留“登录”中具有最高值的行。

现在我有以下内容,但它只删除相同的行:

#remove duplicates and generate new csv
from more_itertools import unique_everseen

with open('jornalnoticias.csv','r') as f, open('jornalnoticias_full.csv','w') as out_file:
    out_file.writelines(unique_everseen(f))

【问题讨论】:

    标签: python python-2.7 csv


    【解决方案1】:

    您可以使用csv.DictReader 读取CSV 文件,使用collections.defaultdictUserName 对项目进行分组,并使用csv.DictWriter 输出最大Login 行。

    以下内容应该适用于 Python2.7

    from csv import DictReader, DictWriter
    from collections import defaultdict
    
    with open("jornalnoticias.csv", mode="rb") as fin, open("jornalnoticias_full.csv", mode="w") as fout:
        reader = DictReader(fin)
        writer = DictWriter(fout, fieldnames=reader.fieldnames)
    
        # Group by username
        groups = defaultdict(list)
        for row in reader:
            groups[row["Username"]].append(row)
    
        # Write to CSV file
        writer.writeheader()
        for username, group in groups.items():
    
            # Get max login and write row
            highest_login = max(group, key=lambda x: float(x['Login']))
            writer.writerow(highest_login)
    

    jornalnoticias_full.csv

    Username,Name,Phone,Email,Country,Login
    John23,John Doe,99999999,johndoe@yahoo.com,Italy,1585652050.037622
    

    注意:迁移到最新的 Python 3.8 可能是个好主意。自 Python 2.7 以来,有些事情发生了一些变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 2020-03-27
      • 2020-02-17
      • 1970-01-01
      • 2014-03-14
      相关资源
      最近更新 更多