Python使用xlsxwriter与pandas读写Excel文件时遇异常问题
问题排查与修复方案
咱们一步步拆解你代码里的问题,再给出能正常运行的修复版本:
原代码的核心问题
- 没有执行实际写入操作:你创建了工作簿和工作表,但从头到尾都没调用
worksheet.write或worksheet.write_row这类方法把数据写入Excel——相当于打开了文件但啥内容都没写就关了。 - 过早且重复关闭工作簿:你在循环里就调用了
workbook.close(),这时候数据还没写入,而且后面又重复调用了一次,这不仅会导致写入失败,还可能引发IO错误。 - 循环逻辑无效:你用
enumerate(a)遍历外层列表[array],拿到的col是0、data是整个数组,但没有对这个data做任何写入处理,等于循环白跑了一趟。
修复后的完整代码
import xlsxwriter import pandas as pd # 创建工作簿和工作表 workbook = xlsxwriter.Workbook('arrays.xlsx') worksheet = workbook.add_worksheet() # 要写入的目标数据 array = [0.222333333333333, 0.048150492835172518, 'a12', 'a13', 'a14'] a = [array] # 二维列表,代表一行数据 print('writedata=', a) # 执行写入操作:遍历二维列表,逐行写入工作表 for row_num, row_data in enumerate(a): # 从第row_num行、第0列开始,写入整行数据 worksheet.write_row(row_num, 0, row_data) # 所有写入完成后,仅需调用一次close保存文件 workbook.close() # 读取Excel:因为没有表头,指定header=None避免把数据行当作表头 x = pd.read_excel('arrays.xlsx', header=None) print('readdata=', x)
关键修改说明
- 添加有效写入逻辑:用
worksheet.write_row一次性写入整行数据,比逐个单元格写入更高效;如果需要自定义单元格格式,也可以用worksheet.write(row, col, value)逐个写入。 - 修正工作簿关闭时机:必须在所有写入操作完成后,再调用一次
workbook.close(),确保所有数据都被持久化到文件中。 - 读取时适配无表头场景:你的数据没有表头,pandas默认会把第一行当作表头,加上
header=None参数后,读取结果会完全匹配你写入的数组结构。
运行结果验证
执行修复后的代码,你会看到如下输出,读取结果和写入数据完全一致:
writedata= [[0.222333333333333, 0.048150492835172518, 'a12', 'a13', 'a14']] readdata= 0 1 2 3 4 0 0.222333 0.048150 a12 a13 a14
内容的提问来源于stack exchange,提问作者Ali Shan
相关产品推荐
相关产品推荐

