Система не может найти путь, указанный os.listdir в python - PullRequest
0 голосов
/ 08 декабря 2018
dirs= os.listdir('C:/Users/DELL PC/Desktop/Msc Project/MSc project/dataset')
for file in dirs:
    print (file)

lowfiles  = [f for f in os.listdir('Training data/LOW') 
             if os.path.isfile(join('Training data/LOW', f))] 
highfiles = [f for f in os.listdir('Training data/HIGH')
             if os.path.isfile(join('Training data/HIGH', f))]
files = []

Я выполняю этот код для создания векторов объектов, но он показывает FileNotFoundError: [WinError 3] Системе не удается найти указанный путь: 'Training data / LOW'

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

почему это происходит?

1 Ответ

0 голосов
/ 08 декабря 2018

Попробуйте это.В таких случаях я предпочитаю писать вспомогательную функцию, а не многократно набирать (почти) одну и ту же длинную строку (слишком подверженную ошибкам).Аналогично, если понимание списка становится слишком длинным, я предпочитаю форму цикла.

import os

def files(path):
    result = []
    for name in os.listdir(path):
        fullname = os.path.join(path, name)
        if os.path.isfile(fullname):
            result.append(name)
    return result

path = r"C:\Users\DELL PC\Desktop\Msc Project\MSc project\dataset"
for file in os.listdir(path):
    print(file)

lowfiles = files(os.path.join(path, r"Training data\LOW"))
highfiles = files(os.path.join(path, r"Training data\HIGH"))

Для пояснения комментария ниже: следующее введет бесконечный цикл, который печатает 1, 2, 3, 1, 2, 3, 1, 2, 3 ...

a = [1, 2, 3]
for i in a:
    a.append(i)
    print(i)

Никогда не добавляйте элементы в контейнер, для которого вы делаете цикл.

Здесь вы пытаетесь это сделать:

for i in lowfiles:
    lowfiles.append([i, 'Low'])

Итак, если lowfiles изначально содержит ["file1", "file2"], то после первого цикла это будет ["file1", "file2", ["file1", "Low"]], тогда ["file1", "file2", ["file1", "Low"], ["file2", "Low"], [["file1", "Low"], "Low"], ...].Вы не хотите этого делать.

Я только догадываюсь, но если вы хотите переименовать ваши файлы, добавив «Низкий» в конце имени, затем:

Сначала изменитеуказанная выше функция files добавляет fullname (с каталогом), а не только name без каталога), так что вам не придется снова и снова os.path.join.

КДля переименования файлов выполните следующее:

for fullname in files(os.path.join(path, r"Training data\LOW")):
    os.rename(fullname, fullname + "Low")

Если есть расширение файла, которое вы не хотите изменять, вы можете сделать это:

for fullname in files(os.path.join(path, r"Training data\LOW")):
    base, ext = fullname.rsplit(".", 1)
    os.rename(fullname, base + "Low." + ext)

И если вы не хотитечтобы переименовать файлы, вам нужно будет уточнить, что вы пытаетесь сделать.

...