Как бороться с «NotADirectoryError: [Errno 20] Не каталог:» - PullRequest
1 голос
/ 21 марта 2020

Моя ошибка

---------------------------------------------------------------------------
NotADirectoryError                        Traceback (most recent call last)
<ipython-input-2-b4da6c1da6e1> in <module>
     12 lst = []
     13 for d in lst1:
---> 14     lst = lst + listdir(d)
     15 lst

<ipython-input-2-b4da6c1da6e1> in listdir(path)
      4 def listdir(path):  #传入存储的list
      5     lst = []
----> 6     for file in os.listdir(path):
      7         file_path = os.path.join(path, file)
      8         lst.append(file_path)

NotADirectoryError: [Errno 20] Not a directory: '/Users/zhangzhenzhi/Desktop/Term2_Final/CASA0006/CityofLondonCrimeData/.DS_Store'

И мой код

# -*- coding: utf-8 -*-  
import os  

def listdir(path):  #传入存储的list
    lst = []
    for file in os.listdir(path):  
        file_path = os.path.join(path, file)  
        lst.append(file_path) 
    return lst
lst1 = listdir(r'/Users/zhangzhenzhi/Desktop/Term2_Final/CASA0006/CityofLondonCrimeData' )

lst = []
for d in lst1:
    lst = lst + listdir(d)
lst

Я хочу сохранить путь всех файлов в список, но я запускаю его, он показал ошибку и я не могу понять, что я могу сделать?

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Посмотрите на исключение. NotADirectoryError: [Errno 20] Не каталог: '/Users/zhangzhenzhi/Desktop/Term2_Final/CASA0006/CityofLondonCrimeData/.DS_Store'

Эта строка lst1 = listdir(r'/Users/zhangzhenzhi/Desktop/Term2_Final/CASA0006/CityofLondonCrimeData' )

Возвращает список всех путей включая файлы с полным путем, и ".DS_Store" - это файл. Затем вы также oop через то, что вы получили на lst1. В этом случае os.listdir пытается обработать файл (путь в трассировке), который вызывает исключение.

Еще solid способ заключается в использовании пакета glob для этой цели. Попробуйте

glob.glob(path) и он вернет список путей по этому пути. Если вы хотите, чтобы он был рекурсивным, добавьте /** в конец пути и добавьте параметр recursive=True.

0 голосов
/ 21 марта 2020

Вам необходимо проверить тип объекта перед "os.listdir"

def listdir(path):  #传入存储的list
    lst = []
    if os.path.isdir(path): # Check this path = path to folder
        for file in os.listdir(path):  
           file_path = os.path.join(path, file)  
           lst.append(file_path)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...