2016-10-02 2 views
0

Мне было интересно, как правильно использовать os.path и pathlib. Я должен искать каталог (который я уже сделал), а затем после этого введите письмо и пробел, и он решит, что он будет делать.Использование pathlib/os.path и т. Д. Правильно

импорт ОС импорт os.path импорт 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 Files или что-то еще, я бы ввел N в новую строку для поиска того, что я хочу в каталоге.

Скажите, как

C:\Users\Desktop\stuff

N something.txt

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

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

+0

'search_files' не работает правильно! Вам нужно использовать методы в объекте «Путь», чтобы узнать об этом. Таким образом, вместо 'if exist:', который всегда является «True», потому что его просто объект «Path», do 'if exist.exists():'. – tdelaney

+0

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

+0

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

ответ

0

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

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) 
+0

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

+0

Hm также показывает файл, который не существует. – accelerate

+0

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

Смежные вопросы