繁体   English   中英

从 csv 中删除重复项

[英]Remove duplicates from a csv

好的,所以我有一个 csv 文件,我想删除重复项。 我有一个工作代码示例,但我后来也尝试复制它,副本显示为空白,我相信是因为我用来删除重复项的代码没有关闭要复制的 csv 文件。 如果我在删除重复项之前复制文件,它可以完美运行。 但我想避免删除两个文件上的重复项。

删除重复项的工作代码:

rows = csv.reader(open('scan.csv', 'r', newline=''))
newrows = []
for row in rows:
    if row not in newrows:
        newrows.append(row)
writer = csv.writer(open('scan.csv', 'w', newline=''))
writer.writerows(newrows)

我相信 python3 的答案是不要执行上面的代码,而是使用 with 语句。 但是我完全不知道如何将该代码转换为 with 语句。 这是我正在尝试的(这可能是完全错误的)

with open('scan.csv', 'r', newline='') as rows:
for row in rows:
    if row not in newrows:
        newrows.append(row)
with open('scan.csv', 'w', newline='') as writer:
writer.writerows(newrows)

如果我对整个基本问题有误,我这样做是为了复制。

shutil.copyfile('scan.csv', 'iplist.csv')

在我的工作代码之前运行它,工作正常。 在工作代码之后运行它,生成一个空的 csv 文件。

我还试图在不导入任何必须安装在像熊猫这样的 Windows 上的东西的情况下构建这整个东西。

问题:使用 With 语句从 csv 中删除重复项

模式使用嵌套with ...


参考:内置函数

  • with

    上下文管理器的典型用途包括关闭打开的文件

  • set

    集合对象是不同的可散列对象的无序集合。

  • hash

    返回对象的哈希值


_set = set()

with open('scan.csv', 'r', newline='') as in_file, \
     open('iplist.csv', 'w', newline='') as out_file:

    for line in in_file:
        _hash = hash(line)
        if _hash not in _set:
            out_file.write(line)
            _set.add(_hash)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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