2016-10-06 4 views
0

Мне было интересно, как вы правильно используете os.path. В основном то, что я пытаюсь сделать, это спросить пользователя о директории, и после этого они набирают в этом случае письмо (N), а затем имя файла в каталоге и объединяет каталог с файлом.Объединение путей с использованием os.path.join

Например:

C:\Desktop 

и

N hello 

Конечный результат производства будет C: \ Desktop \ Привет.

import os 
import os.path 
import shutil 
from pathlib import Path 

«: каталог = вход() search_files() directory1 = search_characteristics (каталог) #print (directory1)

Что я делаю неправильно?

+2

Можете ли вы объяснить, что ваш общий код должен делать, как это в настоящее время не работает, и что именно вы ожидаете от этого, это не ведет себя так, как вы думаете. Это помогает сузить поиск неисправностей, чтобы обеспечить более быстрый и лучший ответ. – idjaw

+0

@idjaw Я медленно работаю над общим кодом, но то, что должен сделать N, это . Если вторая строка ввода начинается с буквы N, поиск будет состоять из файлов, имена которых точно совпадают с определенным именем. За N будет следовать пробел; после пробела остальная часть строки укажет имя файлов, которые нужно найти. Прямо сейчас, когда я пытаюсь объединить пути, скажем, 'C: \ Desktop' с hello.txt на рабочем столе, он все равно будет показывать что-то вроде' C: \ Desktop' вместо 'C: \ Desktop \ hello '. – accelerate

+0

Вы должны использовать что-то вроде [os.walk] (https://docs.python.org/3/library/os.html#os.walk) для поиска по каталогу. – idjaw

ответ

0

Здесь это должно работать.

def search_characteristics(directory): 
    interesting = input() 
    interesting = interesting.split(" ") 
    if (interesting[0] == 'N'): 
     directory += (os.sep + interesting[1]) 
     print(directory) 
    elif interesting.startswith('E'): 
     return os.path.splitext(directory,'') 
    else: 
     print("Error") 
     return search_characteristics(directory) 

Если вы должны использовать os.path.join, то вы можете заменить строку с os.sep с:

directory = os.path.join(directory, interesting[1]) 
+0

Я отредактировал свое оригинальное сообщение, так как получил его на работу, но столкнулся с другой проблемой. Если бы я должен был поставить 'N hello', это будет отображаться как' C: \ Desktop \ hello ', но что, если файл не существует, скажите 'N doesntexist', который мне нужно будет проверить, был ли он файлом. Я добавил if-файл, чтобы проверить, является ли он файлом, но независимо от того, что я делаю, он сказал бы «Не файл», даже если это файл. – accelerate

+0

Я попытался запустить ваш код, и у меня не было проблем. Что вы используете для своих вкладов? –

+0

Код работает отлично, но я чувствую, что он работает не так. Я чувствую, что может получить вход «Не файл», который я вставляю, потому что это не файл, а каталог. В основном говорят, что у меня есть настоящий файл с именем 'realfile.txt' и файл с именем fakefile, который не существует. Я бы запустил код. 'C: \ Desktop' Я бы ввел в N realfile.txt, и он вернул бы' C: \ Desktop \ reaifile.txt'. Я запустил его снова и поместил N fakefile.txt. Он должен сказать: «Не файл». Когда я запускаю свой текущий код, я получаю «Не файл» для обоих. Как я могу исправить это, чтобы реальный файл не дал ошибку «не файл»? – accelerate

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