zoukankan      html  css  js  c++  java
  • python--excel文件格式转换

    最近工作中要用到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()
    excel文件格式转换

    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

    好了,就这些吧,如有新的问题,再来记录填坑

  • 相关阅读:
    个人项目(Word Count Java)
    自我介绍+软工5问
    第六次实践
    第五次实践作业
    第四次实践作业
    第三次实践作业
    第二次实践作业
    第1次实践作业
    第06组 Beta版本演示
    第06组 Beta冲刺(4/4)
  • 原文地址:https://www.cnblogs.com/km-thonder/p/15307380.html
Copyright © 2011-2022 走看看