Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过openpyxl消除Excel文件中的重复项_Python_Excel_Python 3.x_Openpyxl_Break - Fatal编程技术网

Python 如何通过openpyxl消除Excel文件中的重复项

Python 如何通过openpyxl消除Excel文件中的重复项,python,excel,python-3.x,openpyxl,break,Python,Excel,Python 3.x,Openpyxl,Break,我有两个excel列,name和company,我正试图找出最简单的方法来确保获得一个没有任何重复的元组列表(name,company)作为输出 下面的代码对我来说似乎是正确的,但由于某种原因它不起作用,可能是因为我找不到一些愚蠢的错误 updated = openpyxl.load_workbook('abc.xlsx') u_wb = updated.get_sheet_by_name('SP_Table') u_names = u_wb['F'] #column F is where th

我有两个excel列,name和company,我正试图找出最简单的方法来确保获得一个没有任何重复的元组列表(name,company)作为输出

下面的代码对我来说似乎是正确的,但由于某种原因它不起作用,可能是因为我找不到一些愚蠢的错误

updated = openpyxl.load_workbook('abc.xlsx')
u_wb = updated.get_sheet_by_name('SP_Table')
u_names = u_wb['F'] #column F is where the names are
u_company = u_wb['C'] #column C is where the company's name are
l=[]

for x in range(len(u_names)-1):
    i=x
    i+=1
    if u_company[x].value==None #in case a field is missing
        continue
    if i==len(u_names):
        break
    for z in l:
        r=(u_names[x].value, u_names[x].value)
        if r==z:
            continue
    else:
        t=(u_names[x].value, u_company[x].value)
        l.append(t)
print("Number of contacts:", len(l))
我没有收到任何错误,联系人的计数实际上减少了,但这只是因为
u_company[x].value==None
子句。
感谢您提供的任何帮助或资源

您试图忽略重复项的条件是不正确的

您正在向列表中添加成对的
(u_名称[x].value,u_公司[x].value)
。这没关系,也有道理。问题是您正在检查列表中是否已存在
(u\u name[x].value,u\u name[x].value)

除此之外,即使它是相同的,当你发现一个复制品时,你只是什么也没做。
for
后面的else语句将始终执行!这是因为
for
循环后的else语句发生在循环结束时,而没有命中
break
语句。因此,您要做的是:

范围内x的
(len(u_名称)):
如果u_company[x].value==None#以防字段丢失
持续
r=(u_名称[x]。值,u_公司[x]。值)
如果r在l中:
持续
其他:
l、 附加(t)
打印(“联系人数量:,len(l))

openpyxl有一个强大的API,可以使这类事情变得简单

contacts = set() # sets cannot contain duplicates

for row in ws.iter_rows(min_col=2, max_col=6, values_only=True):
    company = row[0]
    name = row[-1]
    if company: # adjust if necessary
        contacts.add((company, name))

print(len(contacts))

根据您希望对联系人执行的操作,您可能希望使用不同的数据结构,如字典。

如果您已经在使用pandas,则将excel工作表加载到数据框、删除重复项并再次保存可能会更容易。如果你不使用熊猫,并且想坚持你的方法,那么整个事情不应该超过3行:订单重要吗?如果不重要,那么将所有的名字和公司载入列表;现在这个问题和其他任何关于如何从列表中删除重复项的问题没有什么不同,虽然没有考虑过使用熊猫,实际上它看起来更容易,现在将尝试它,同时我仍然非常好奇为什么这不起作用……非常感谢你的提示!对于这类事情,熊猫不会更快,但它仍然是一个非常有用的图书馆。