#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')