Python – получение каталога файлов в качестве пользовательского ввода

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

inputdirectory = r'C:/test/files'
inputfileextensions = 'txt'
files = glob.glob(inputdirectory+"*."+inputfileextensions)

Но я хочу, чтобы пользователь мог вводить местоположение. Я пробовал следующий код:

inputdirectory = input("Please type in the full path of the folder containing your files:    ")
inputfileextensions = input("Please type in the file extension of your files:    ")
files = glob.glob(inputdirectory+"*."+inputfileextensions)

Но это не работает. Сообщение об ошибке не появляется, но файлы возвращаются как пустые. Я пытался ввести каталог с кавычками, с прямой и обратной косой чертой, но не могу заставить его работать. Я также пытался преобразовать ввод в необработанную строку, используя «r», но, возможно, синтаксис неверен. Есть идеи?


person Actuary    schedule 22.11.2017    source источник
comment
попробуйте напечатать: inputdirectory+"*."+inputfileextensions   -  person juanpa.arrivillaga    schedule 22.11.2017


Ответы (3)


Не совсем уверен, как первая версия работает для вас. То, как определены переменные, у вас должен быть вход в glob примерно так:

inputdirectory+"*."+inputfileextensions == "C:\test\files*.txt"

Глядя на приведенное выше значение, вы можете понять, что это не то, чего вы пытаетесь достичь. Вместо этого вам нужно соединить два пути с помощью оператора обратной косой черты. Что-то типа:

os.path.join(inputdirectory, "*."+inputfileextensions) == "C:\test\files\*.txt"

С этим изменением код должен работать независимо от того, берется ли ввод от пользователя или предопределено.

person ThePretendProgrammer    schedule 22.11.2017

Попробуйте соединить путь с os.path.join. Он справится с проблемой косой черты.

import os
...
files = glob.glob(os.path.join(inputdirectory, "*."+inputfileextensions))
person Alperen    schedule 22.11.2017

Рабочий код для примера, с рекурсивным поиском.

#!/usr/bin/python3

import glob
import os

dirname = input("What is dir name to search files? ")
path = os.path.join(dirname,"**")
for x in glob.glob(path, recursive=True):
    print(x)
person ukki    schedule 31.07.2020