Python新手求助:Excel导入MySQL时跳过表头与最后一行
解决Excel导入MySQL时跳过表头和最后一行的问题
嘿,作为Python新手碰到这种细节问题太正常了,我帮你梳理下代码里的核心问题:
首先看你循环里的两处关键问题:
cell方法调用缺失对象前缀
你写的currency_Symbol = cell(r, 1).value会直接触发NameError,因为cell()是Excel工作表对象的专属方法,必须加上sheet.前缀才能正常调用,修改后应该是:currency_Symbol = sheet.cell(r, 1).value笔误修正
原代码里rowid = sheet.cell(r, o).value的o明显是笔误,应该改成数字索引0,不然会取到错误的列数据。
另外再确认下你的循环范围逻辑:range(1, sheet.nrows - 1)是完全正确的——
sheet.nrows是工作表的总行数,比如表中有10行数据,nrows就是10range(1, sheet.nrows -1)会从索引1(跳过第0行的表头)遍历到索引sheet.nrows-2(自动跳过最后一行的索引sheet.nrows-1),完美匹配你“跳过表头和最后一行”的需求
给你一个修正后的完整代码片段参考:
# 假设已完成xlrd和MySQL连接的初始化 import xlrd import mysql.connector # 打开目标Excel文件 workbook = xlrd.open_workbook('your_excel_file.xlsx') sheet = workbook.sheet_by_index(0) # 取第一个工作表 # 建立MySQL连接 conn = mysql.connector.connect( host='你的数据库地址', user='数据库用户名', password='数据库密码', database='目标数据库名' ) cursor = conn.cursor() # 遍历目标数据行(跳过表头和最后一行) for r in range(1, sheet.nrows - 1): rowid = sheet.cell(r, 0).value currency_Symbol = sheet.cell(r, 1).value # 按需继续读取其他列数据... # 插入MySQL的SQL语句,根据你的表结构调整字段 sql = "INSERT INTO your_table_name (rowid, currency_symbol) VALUES (%s, %s)" val = (rowid, currency_Symbol) cursor.execute(sql, val) # 提交事务并关闭连接 conn.commit() cursor.close() conn.close()
最后给你两个小提醒:
- 如果Excel里存在空值,建议加个空值判断,比如
rowid = sheet.cell(r, 0).value if sheet.cell(r,0).value != '' else None,避免插入数据库时出错 - 如果你用的是
.xlsx格式的Excel,要确保安装的是xlrd 2.x版本(1.x版本只支持.xls格式)
内容的提问来源于stack exchange,提问作者P.Costa
相关产品推荐
相关产品推荐

