求助:如何用其他方法迭代Excel文件中的列表?附openpyxl代码
迭代Excel文件列表的多种实现方法
你给出的openpyxl代码存在逻辑问题:equipe[cell]里的cell是单元格对象,不能直接作为列表索引,需用cell.value获取单元格内容。以下是修正后的代码,以及其他几种常用的实现方案:
一、修正后的openpyxl实现
场景1:将列表写入Excel的A列
from openpyxl import load_workbook wb = load_workbook("italian_team.xlsx") ws = wb.active equipe = ["Juventus", "Ac Milan", "Torino", "Pescara", "As Roma", "Genoa", "Napoli"] # 遍历列表,写入A列对应行(行号从1开始) for idx, team in enumerate(equipe, start=1): ws[f"A{idx}"] = team wb.save("italian_team.xlsx")
场景2:读取A列内容并与列表匹配
from openpyxl import load_workbook wb = load_workbook("italian_team.xlsx") ws = wb.active equipe = ["Juventus", "Ac Milan", "Torino", "Pescara", "As Roma", "Genoa", "Napoli"] # 遍历A列单元格,过滤空值并匹配列表 for cell in ws["A"]: if cell.value and cell.value in equipe: print(f"找到匹配球队:{cell.value}") wb.save("italian_team.xlsx")
二、使用pandas实现(简洁高效,适合批量操作)
pandas处理表格类数据优势明显,代码更简洁:
import pandas as pd # 读取Excel文件 df = pd.read_excel("italian_team.xlsx") equipe = ["Juventus", "Ac Milan", "Torino", "Pescara", "As Roma", "Genoa", "Napoli"] # 迭代A列内容并匹配列表 for value in df['A'].dropna(): if value in equipe: print(f"匹配到:{value}") # 将列表写入A列并保存 df['A'] = equipe df.to_excel("italian_team.xlsx", index=False)
三、使用xlrd/xlwt实现(兼容旧版.xls格式)
如果需要处理.xls格式文件,可使用这两个库:
import xlrd import xlwt from xlutils.copy import copy # 读取旧版Excel文件 rb = xlrd.open_workbook("italian_team.xls") wb = copy(rb) ws = wb.get_sheet(0) equipe = ["Juventus", "Ac Milan", "Torino", "Pescara", "As Roma", "Genoa", "Napoli"] # 写入A列(行索引从0开始) for idx, team in enumerate(equipe): ws.write(idx, 0, team) wb.save("italian_team.xls") # 读取A列内容并匹配 for row in rb.sheet_by_index(0).col_values(0): if row in equipe: print(f"找到匹配:{row}")
四、转CSV后用内置csv模块处理
若Excel可另存为CSV格式,用内置模块更轻量:
import csv equipe = ["Juventus", "Ac Milan", "Torino", "Pescara", "As Roma", "Genoa", "Napoli"] # 读取CSV文件并匹配列表 with open("italian_team.csv", "r", encoding="utf-8") as f: reader = csv.reader(f) for row in reader: if row and row[0] in equipe: print(f"匹配成功:{row[0]}") # 将列表写入CSV文件 with open("italian_team.csv", "w", encoding="utf-8", newline="") as f: writer = csv.writer(f) for team in equipe: writer.writerow([team])
内容的提问来源于stack exchange,提问作者Marouan H
相关产品推荐
相关产品推荐

