Проблема с открытием тех же файлов openpyxl - PullRequest
0 голосов
/ 13 июля 2020

Написание программы, которая перемешивает содержимое файлов. Все файлы почти одинаковы, но для некоторых это не работает. Не понимаю.

for file in allFiles:
print(file)
items = []
fileName = file
fileIndex = 1
directory = os.path.join(path, fileName[:-5].strip())
if not os.path.exists(directory):
    os.mkdir(directory)
    
theFile = openpyxl.load_workbook(file)
allSheetNames = theFile.sheetnames

И после некоторого количества файлов он показывает мне следующие ошибки:

Traceback (most recent call last):
  File "D:\staff\Python\NewProject\glow.py", line 25, in <module>
    theFile = openpyxl.load_workbook(file)
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\reader\excel.py", line 313, in load_workbook
    reader = ExcelReader(filename, read_only, keep_vba,
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\reader\excel.py", line 124, in __init__
    self.archive = _validate_archive(fn)
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\openpyxl\reader\excel.py", line 96, in _validate_archive
    archive = ZipFile(filename, 'r')
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\zipfile.py", line 1269, in __init__
    self._RealGetContents()
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\zipfile.py", line 1336, in _RealGetContents
    raise BadZipFile("File is not a zip file")
zipfile.BadZipFile: File is not a zip file

Но до этого все работало нормально, ошибок не было. Кто-нибудь может догадаться, почему? Спасибо всем. Ищем файлы так:

path = os.getcwd()
sourcePath = os.getcwd() + '\source'
extension = 'xlsx'
os.chdir(sourcePath)
allFiles = glob.glob('*.{}'.format(extension))

1 Ответ

0 голосов
/ 13 июля 2020

Вы перебираете все файлы, не относящиеся к их типу. Возможно, вы или процесс добавили в каталог файл, который не является файлом xlsx. Вот почему openpyxl не может его прочитать.

...