python - CSV修改重复&算法 "paradox",在python中

标签 python python-2.7 csv

我是 python (2.7) 的初学者。 这是我的文件:

data, 1234, data
data, 6868, data
data, 3545, data
data, 6868, data
data, 7777, data
data, 3545, data

我想检查重复项(仅在第 2 列中)并将重复项之一递增 +1,如下所示:

data, 1234, data
data, 6868, data
data, 3545, data
data, 6869, data
data, 7777, data
data, 3546, data

我做了类似的事情,但它只写重复的行:

entries = set()
for row in reader:
    key = row[2] 
    if key in entries:
        aaa = row[2]
        bbb = int(aaa) + 1 
        ccc = str(bbb)
        entries.add(ccc)
    else:
        entries.add(key)
    writer.writerow(row)

我不明白该怎么做。

但我问自己另一个问题:如果增加的数字现在是重复的,我该如何检查?它不会创建无限循环吗?

最佳答案

当您迭代文件时,将第 2 列的值存储在 set 中,当遇到重复值时,使用 while 加 1,直到该值变为独特的。存储新值,并使用 csv.writer 将整行写入文件:

import csv

data = set()
with open ('task1.txt', 'rb') as file_in, open ('output.txt', 'wb') as fileout:
    reader = csv.reader(file_in)
    writer = csv.writer(fileout)
    for line in reader:
        idx = int(line[1])
        while idx in data:
            idx += 1
        data.add(idx)
        line[1] = str(idx)

        writer.writerow(line)

注意:在Python2.7中,我们打开文件句柄buffer模式(即rb而不是r,但这在Python3中是不必要的.

关于python - CSV修改重复&算法 "paradox",在python中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42829645/

相关文章:

python - sklearn 谱聚类结果的聚类数量比设置的要少

python - 如何通过原始输入从类中提取信息

python - 如何在线性时间内合并Python中的两个排序列表(仅遍历一次)?

javascript - npm csv-parse 不读取所有行

python - 当 CheckListCtrlMixin 中的项目被选中时,wxPython 会发出什么事件?

python - 无法导入 SparkContext

sqlite - 使用 Web2py/Python 在 SQLite 中引用另一个表

SQL Server 2008 行到 1 个 CSV 字段

Python:使用 Pandas 从csv文件中提取特定列(包含特殊字符)

python - PyQt4 QMessageBox中连接无法调用slot方法