Почему-то появляется второй "\"
Сегодня столкнулся с такой проблемой, что появляется второй "\"
import os
directory = r'img'
for entry in os.scandir(directory):
if (entry.path.endswith(".jpg")
or entry.path.endswith(".png")) and entry.is_file():
test = []
print(entry.path)
но мне нужен список, я сделал его, и как раз тут это и появилось:
import os
directory = r'img'
for entry in os.scandir(directory):
if (entry.path.endswith(".jpg")
or entry.path.endswith(".png")) and entry.is_file():
test = []
for entry in os.scandir(directory):
test.append(entry.path)
print(test)
это второй код который как раз создает массив
Если что я плохо знаю python
Ответы (2 шт):
Это экранирование вашего символа \. Поскольлку символ слэша является спец символом необходимо явно показывать, что в данном случае данный символ будет частью последовательности, символом строки. Чтобы сделать символ частью строки, то надо перед символом поставить знак слэша. На заметку это не обязательно, можно использовать r-string. Ссылка в конце ответа
Наглядно можно посмотреть как работает экранирование на таком простом примере:
a = "\"abcde\""
где двойные кавычки экранируются и являются частью строки.
Если использовать одинарные кавычки, то экранирования можно избежать в данном конкретном случае, аналог
a = '"abcde"'
оф док можно поизучать здесь
Всё нормально, так и должно быть. Символ \ используется как экранирующий символ, чтобы строка вроде 'string with \'quote\'' распознавалась нормально. И у вас работает только логика отображения, но не изменения данных ('\'' == "'", r'\ ' == '\\ ')
По-разному выводится, тк в первом случае вы выводите строку, а во втором случае список, применяется разная логика (условно, так):
print(string) => print(string.__str__())
print(list_of_string) =>
print(list_of_string.__str__()) =>
print(
'['
+ ' ,'.join(string.__repr__() for string in list_of_string)
+ ']'
)
В первом случае вызывается string.__str__(), во втором string.__repr__(), отсюда и разное отображение.

