Недопустимый путь к файлу или тип объекта буфера: при попытке перебора файлов

#python #excel #selenium

#python #excel #selenium

Вопрос:

Я обновил приведенный ниже код; в попытке разрешить моему скрипту перебирать несколько файлов в каталоге (в отличие от одного):

 @classmethod
def find_file(cls):
     all_files = list()
     """"Finds the excel file to process"""
     archive = ZipFile(config.FILE_LOCATION)
     for file in archive.filelist:
        if file.filename.__contains__('Horrible Data Site '):
             all_files.append(archive.extract(file.filename, config.UNZIP_LOCATION))
     return all_files   
  

До объявления ‘ all files = list() ‘ выше в моем find_files методе это работало с одним файлом в каталоге. Я добавил all_files в попытке разрешить цикл по всем файлам в каталоге.

Кроме того, в приведенном ниже main.py я просто добавил for прямо перед PENDING_RECORDS для этой цели.

 """Start Point"""

from data.find_pending_records import FindPendingRecords
from vital.vital_entry import VitalEntry
from time import sleep

if __name__ == "__main__":
    try: 
        for PENDING_RECORDS in FindPendingRecords().get_excel_data():
            # Do operations on PENDING_RECORDS

            # Reads excel to map data from excel to vital
            MAP_DATA = FindPendingRecords().get_mapping_data()

            # Configures Driver
            VITAL_ENTRY = VitalEntry()

            # Start chrome and navigate to vital website
            VITAL_ENTRY.instantiate_chrome()

            # Begin processing Records
            VITAL_ENTRY.process_records(PENDING_RECORDS, MAP_DATA)

            print (PENDING_RECORDS)
            print("All done")     
    except Exception as exc:
        print(exc)
  

Добавление all_files() и for теперь выводит следующую ошибку в приглашении Anaconda:

 (base) C:Python>python main.py
Invalid file path or buffer object type: <class 'list'>
  

это config.py

 FILE_LOCATION = r"C:ZipDATA Docs.zip"
UNZIP_LOCATION = r"C:ZipPending"
VITAL_URL = 'http://horriblewebsite:8080/START'
HEADLESS = False
PROCESSORS = 4
MAPPING_DOC = ".//map/mappingDOC.xlsx"
  

Комментарии:

1. Почему find_file это метод класса? Вы никогда не используете cls в его определении. Также не ясно, где find_file используется. Вы также слишком много делаете в try блоке; мы понятия не имеем, что на самом деле вызывает то исключение, которое вы перехватываете. Избавьтесь от try / except и покажите нам обратную трассировку, созданную неперехваченным исключением.

2. Что config.FILE_LOCATION в этой функции? Это str или list ?

3.Кроме того, согласно документам ZipFile , поддерживается with диспетчер контекста, и поэтому его следует использовать при открытии файла

4. @PeterGibbons Можете ли вы заменить print(exc) на raise и показать полную трассировку стека? print(exc) усекает вывод