#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
объект, doif 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 будет следовать пробел; после пробела остальная часть строки будет указывать имя файлов, которые нужно искать.