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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM