Правильное использование pathlib / os.path и т. Д.

#python

#python

Вопрос:

Мне было интересно, как использовать ОС.путь и pathlib правильно. Я должен выполнить поиск каталога (что я уже сделал), а затем после этого ввести букву и пробел, и он решит, что он будет делать.

импорт ОС импорт ОС.импорт пути shutil из пути импорта pathlib

 def search_files():
    directory = input()
    exist = Path(directory)
    if exist.exists():
        return directory
    else:
        print("Error")
        print("Try again: ")
        return search_files()





def search_characteristics(directory):
    interesting = input()
    exist = os.path.exists(directory)
    if interesting[0] == 'N':
        return os.path.join(directory, interesting)
    else:
        print("Error")
        return search_characteristics()
    


if __name__ == '__main__':
    directory = input()
    search_files()
    search_characteristics(directory)
    
  

Для этого, как вы можете видеть, search_files ищет каталог, который работает.
Следующая часть — это та, где я в замешательстве. В основном после поиска каталога, C:Program Файлы или что-то в этом роде, я бы ввел N в новую строку, чтобы найти то, что я хочу в каталоге.

Скажем, как

C:UsersDesktopstuff

N something.txt

N будет искать точное имя файла.

Я делаю это правильно или есть другой способ сделать это?

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

1. search_files работает некорректно! Вам нужно использовать методы для Path объекта, чтобы узнать об этом. Итак, вместо if exist: , что всегда True так, потому что это просто Path объект, do if exist.exists(): .

2. os.path.join(directory) не очень интересно. Используйте его только тогда, когда вы хотите объединить несколько компонентов пути.

3. Я изменил его на exist.exists, но я все еще получаю ту же ошибку, которая> directory = os.path.join(каталог) UnboundLocalError: локальная переменная ‘directory’, на которую ссылаются перед назначением

4. Эта несвязанная ошибка означает именно то, что она говорит. Вы ничего не присвоили directory переменной, поэтому python не может ее использовать.

5. Не работает ли directory = os.path.join(directory)? Я помещаю каталог в метод search_files().

Ответ №1:

Этот скрипт будет делать то, что вы хотите. Наряду с использованием результата вашей функции поиска в каталоге для следующего вызова, я также изменил compare на use .startswith , чтобы ответ emtpy string не приводил к сбою программы.

 import os
from pathlib import *

def search_files():
    directory = input()
    exist = Path(directory)
    if exist.exists():
        return directory
    else:
        print("Error")
        print("Try again: ")
        return search_files()


def search_characteristics(directory):
    interesting = input()
    exist = os.path.exists(directory)
    if interesting.startswith('N'):
        return os.path.join(directory, interesting)
    else:
        print("Error")
        return search_characteristics(directory)

if __name__ == '__main__':
    directory = search_files()
    fn = search_characteristics(directory)
    print(fn)
  

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

1. Хм, я кое-что заметил в вашем коде. Когда я запустился и вошел в каталог, затем ввел N <имя файла>, он отобразил каталог /N <имя файла>. Я также заметил, что когда я ввожу число после имени файла, оно выдает ошибку. У меня также есть фактический файл в каталоге.

2. На этом этапе вы можете разбросать несколько отпечатков и посмотреть, какая строка сравнивается с тем, что нужно. Я не был уверен, хотите ли вы N как часть имени, поэтому я оставил его. Вы могли os.path.join(directory, interesting[1:]) бы пропустить N.

3. По сути, N — это «действие», которое сообщает программе, что делать. В данном случае это поиск имени файла. Я также попробовал интересный [1:] и протестировал его. Кажется, что при вводе имени файла появляется пробел, предполагающий, что он не выдает мне «ошибку». N будет искать файлы, имена которых точно соответствуют определенному имени. За N будет следовать пробел; после пробела остальная часть строки будет указывать имя файлов, которые нужно искать.