最近工作中要用到pandas读取excel表格数据,遇到各种问题,在此借这此发布机会,统一记录一下,以供同学们避免不必要的坑,
首先还是要把标题内容给解决,看代码之前,一定要看完下面的话。
1、我主要遇到的问题是,在pandas打开excel时,会报错,具体如下:
大概就是说:不支持的格式,或损坏的文件
其实文件没有损坏,也是可以打开的格式。在我手动打开的时候会有这种提示:
保存时会有这种提示:
然后另存为之后,再打开就没有这种提示了(这种提示Office打开也是会有的),pandas也可以正常读取了,
然而如果有100个这种文件呢,保存100次?
怎么可能,学编程不就是为了解决,无聊重复繁琐的事情,我就想到了用代码进行格式转换。
开始做格式转换的时候,发现在格式转换时会打开文件,还是会有弹窗,导致运行异常,无法转换。
想到解决办法是,启动两个进程,一个用来打开文件转换,一个用来点击确定,取消弹框,问题就解决了。

1 import win32com.client as win32 2 import os 3 import sys 4 import time 5 import win32api 6 import threading 7 import pythoncom 8 9 # 获取桌面路径‘文档格式转换’文件夹中所有文件 10 desktop = os.path.join(os.path.expanduser("~"), 'Desktop') 11 file_url = desktop+'\\'+'文档格式转换' 12 if not os.path.exists(file_url): 13 os.mkdir(m2) 14 list_file = os.listdir(file_url) 15 16 # 根据文件多少进行循环按键 Enter 17 def enter(): 18 for i in range(len(list_file)): 19 time.sleep(3) 20 win32api.keybd_event(13,0,0,0) 21 22 # excel 文件格式转换,并另存为到‘待处理数据’文件夹中 23 def filegeshi(): 24 file_pending = desktop + '\\待处理数据' 25 if not os.path.exists(file_pending): 26 os.mkdir(file_pending) 27 # 循环文件列表,并循环转换文件 28 29 for ex_name in list_file: 30 fname = file_url + "\\" + ex_name # 源文件路径 31 save_as_file = file_pending + "\\" + ex_name # 保存文件路径 32 pythoncom.CoInitialize() # 不加这句话会报错,不知为什么 33 excel = win32.gencache.EnsureDispatch('Excel.Application') 34 wb = excel.Workbooks.Open(fname) # 打开要转换的excel 35 wb.SaveAs(save_as_file, FileFormat = 56) # 文件格式 = 56 为 .xls 格式 36 #wb.SaveAs(save_as_file + 'x', FileFormat = 51) # 文件格式 = 51 为 .xlsx 格式 37 wb.Close() 38 excel.Application.Quit() 39 40 # 主程序 41 def file_conversion(): 42 # 如果‘文档格式转换‘文件夹中为空,则不处理,退出程序 43 if len(list_file) > 0: 44 # 开启两个线程,一个用来打开文件,一个用来按键 Enter 45 # 关键点 .join(),设置让主线程等待所有的子线程都执行完毕,再执行 46 thread_1 = threading.Thread(target=filegeshi) 47 thread_2 = threading.Thread(target=enter) 48 thread_1.start() 49 thread_2.start() 50 thread_1.join() 51 thread_2.join() 52 else: 53 sys.exit() 54 file_conversion()
2、pandas 读取文件时,其他天坑
最新pandas在读取“.xlsx”时,会报错:xlrd.biffh.XLRDError: Excel xlsx file; not supported
原因为,xlrd更新到了2.0.1版本,只支持.xls文件格式,
解决办法,可以先卸载当前版本xlrd,安装旧版本的 xlrd,
pip uninstall xlrd
pip install xlrd==1.2.0
好了,就这些吧,如有新的问题,再来记录填坑