zoukankan      html  css  js  c++  java
  • Python Openpyxl Excel打开操作 zipfile 错误解决:zipfile.BadZipFile: File is not a zip file(转)

    错误描述

    使用openpyxl新建workbook并执行操作,在从某文件目录load workbook时,报错zipfile.BadZipFile: File is not a zip file

    Traceback (most recent call last):
      File "*.py", line 49, in *
        wb = load_workbook(filename)
      File "/home/*/.local/lib/python3.6/site-packages/openpyxl/reader/excel.py", line 316, in load_workbook
        data_only, keep_links)
      File "/home/*/.local/lib/python3.6/site-packages/openpyxl/reader/excel.py", line 124, in __init__
        self.archive = _validate_archive(fn)
      File "/home/*/.local/lib/python3.6/site-packages/openpyxl/reader/excel.py", line 96, in _validate_archive
        archive = ZipFile(filename, 'r')
      File "/usr/lib/python3.6/zipfile.py", line 1131, in __init__
        self._RealGetContents()
      File "/usr/lib/python3.6/zipfile.py", line 1198, in _RealGetContents
        raise BadZipFile("File is not a zip file")
    zipfile.BadZipFile: File is not a zip file
    

     原因

    出现错误的直接原因是,试图打开一个之前没有close的表格文件。这项错误操作可能是因为这些原因引起的:

        之前的进程中,打开的workbook没有正常close,导致出现了额外的临时文件,在试图打开这些临时文件时会出现错误;
        之前的workbook在save时,对于已有文件的覆盖方式不对。

    也有可能是其他错误,但是不重要,看解决方法,可以从根源上避免这一类关于load/save的错误。

    解决
    在写代码的时候一定要未雨绸缪,用安全的方式打开和退出excel文件,就可以从根源上避免上面的这一类关于load/save的错误。

    安全地打开excel
    打开文件时,用以下方式打开excel:如果已经存在原文件,就直接load;如果不存在,就新建workbook准备最后save.

    import os
    from openpyxl import Workbook
    from openpyxl import load_workbook
    if os.path.exists(new_filename):
        new_wb = load_workbook(new_filename)
    else:
        new_wb = Workbook()
    

     安全地保存为excel

    • 首先,文件一旦用完就要记得退出。
    • 其次,退出文件时,对所有的workbook,如果需要save就save,如果不需要save(只读)就一定要close
    wb.save(filename) # 对需要保存写入内容的workbook
    wb.close() # 对程序中只读的workbook


    ————————————————
    版权声明:本文为CSDN博主「WinterShiver」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/WinterShiver/article/details/103443300

  • 相关阅读:
    oracle用户和权限
    oracle中的索引
    oracle中的序列
    oracle中的视图
    oracle PL/SQL块
    oracle创建表案列
    半导体随机存储器
    IEEE754标准
    定点数的移位操作
    真值,原码,反码以及补码和移码总结
  • 原文地址:https://www.cnblogs.com/annatest/p/15189558.html
Copyright © 2011-2022 走看看