Преобразование путей Windows в pathlib.WindowsPath() внутри функции в python

#python #string #windows #pathlib #rawstring

#python #строка #Windows #pathlib #rawstring

Вопрос:

Отредактировано для наглядности

Мне нужно иметь возможность копировать и вставлять путь Windows непосредственно из проводника в функцию, которая превращает его в pathlib.WindowsPath() объект.

Например: я хочу что-то вроде.

 def my_function(my_directory):
    my_directory = pathlib.WindowsPath(my_directory) #this is the important bit 
    files = [e for e in my_directory.itirdir()]
    return(files)

new_list = my_function('C:Usersuser.namenew_projectdata')

print(new_list[0])

OUT[1] 'C:\Users\user.name\new_project\data\data_set_1'

  

Когда я пытаюсь это сделать, я получаю сообщение об ошибке:

 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated UXXXXXXXX escape (<string>, line 1)
  

Теперь я знаю, что это связано с тем, что n в моей строке мой путь к windows, который я передаю функции, и что это будет исправлено, если я передам его как r'C:Usersuser.namenew_projectdata' , но это не практическое решение моей проблемы. Есть ли способ исправить это, преобразовав путь Windows в необработанную строку в моей функции?

Я пытался:

 def my_function(my_directory):
    input = fr'{my_directory}'# converting string to raw string
    path = pathlib.WindowsPath(input)
    files = [e for e in path.itirdir()]
    return(files)

new_list = my_function('C:Usersuser.namenew_projectdata')

print(new_list[0]

OUT[1] 'C:\Users\user.name\new_project\data\data_set_1'

  

но никакой радости.

Любая помощь будет оценена.

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

1. вы пробовали метод rstrip? это будет e.rstrip() для e в my_directory.itirdir()

2. Спасибо, что нашли время. Однако это не решает основную проблему. Проблема не в понимании списка. Дело в том, что мне нужно передать необработанную строку в функцию, и мне нужен способ преобразовать путь Windows в необработанную строку.

Ответ №1:

Вы можете упростить это, просто преобразовав его в «необработанную» строку. Это можно использовать везде, где можно использовать любой другой путь. (os.path, Pathlib и т. Д.)

mypath = r’C:Usersuser.namenew_projectdata ‘ print( ‘mypath is =’, mypath )

Вывод: путь = C:Usersuser.namenew_projectdata

Ответ №2:

Я решил эту проблему, используя .encode('unicode escape')

например:

 from pathlib import Path

def input_to_path():
    user_input = input('Please copy and paste the folder address')
    user_input.encode('unicode escape')
    p = Path(user_input)
    return(p)

  

Ответ №3:

попробуйте это. Добавление двойной обратной косой черты в каталог, чтобы python не интерпретировал одиночную обратную косую черту как escape-символ

 new_list = my_function('C:\Users\user.name\new_project\data')