法一
参照文章可知,原因在于 lxml
这个包和 openpyxl
起冲突。解决的办法是卸掉 lxml 包(pip uninstall lxml),然后再运行代码即可。
不过卸载包毕竟不是好办法,也非长久之计,因此提出法二——输出的数据不是覆盖在原文件上,而是重新生成一个 csv 文件。
法二
这里给出前述可能的代码示例:
#......省略前述
alldata = DataFrame()
for i in range(len(sheets)):
df = pd.read_excel(excel_name, sheet_name=i, index=False, encoding='gbk')
alldata = alldata.append(df)
if i % 50 == 0:
print(i)
#指定合并后的数据放在哪个excel里
writer = pd.ExcelWriter(excel_name, engine='openpyxl')
book = load_workbook(writer.path)
writer.book = book
#指定合并后的数据放在哪个sheet里
writer.save()
writer.close()
print('处理完成!')
为了避免 openpyxl
和 lxml
的冲突,不选择to_excel()
函数,而是选择使用 to_csv()
。
# writer.save()
# writer.close()
# print('处理完成!')
csv_name = 'xxx.csv'
alldata.to_csv(csv_name, index = False ,encoding='gbk')
曲线救国,得以成功~