Нет разрешения на чтение фрейма данных

#python-3.x #pandas #dataframe #windows-10

Вопрос:

Работая с фреймами данных pandas, я получал ошибку, которую не смог решить.

Мой код звучит так:

 to_do = Path(r"E:\directory1\directory2\directory3\To do\") to_compare = Path(r"E:\directory1\To compare\") # There are other directories here like the year and, inside it, the months dfs1 = (read_dfs_1(path) for path in to_do.iterdir()) AR3, E3, E7 = read_lots() dict_dfs1 = {working_month(p): p for p in dfs1} dfs2 = (read_comparing_df(path, AR3, E3, E7) for path in to_compare.iterdir()) dict_dfs2= {working_month(p): p for p in dfs2}  

Никаких проблем с dict_dfs1, но dict_dfs2 возвращает эту ошибку:

 *** PermissionError: [Errno 13] Permission denied: 'E:\directory1\To compare\2021'  

У меня действительно есть доступ к каталогу; Больше никто не пользуется этим файлом; Файл не помечен как «только для чтения»…

Если я прочитаю файл вручную, он будет считываться без проблем.

Есть какие-нибудь идеи??

Ответ №1:

Послание:

 *** PermissionError: [Errno 13] Permission denied: 'E:\directory1\To compare\2021'  

Говорит вам, что вы пытаетесь открыть каталог, как если бы это был файл.

Возможно, вы захотите изменить его на что-то вроде этого:

 dfs1 = (read_dfs_1(path) for path in to_do.iterdir() if path.is_file())  

То же самое относится и ко второму итератору:

 dfs2 = (read_comparing_df(path, AR3, E3, E7) for path in to_compare.iterdir() if path.is_file())  

Неясно, собираетесь ли вы выполнять рекурсивную итерацию. Если это так, то предыдущий код не будет работать, так как он исключит все каталоги.

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

1. Это вроде как сработало. Видите ли, я больше не получаю сообщение об ошибке, но словарь становится пустым. Я понял , что когда я использую .iterdir() , он ищет пути только в этом конкретном каталоге. Я решил проблему с помощью .glob("**/*.xlsx") . Это приведет к поиску всего, что заканчивается на .xlsx внутри каталога, включая подкаталоги. Но это уже другая проблема. Главная проблема, которая у меня была, была решена благодаря вам.