Почему-то появляется второй "\"

Сегодня столкнулся с такой проблемой, что появляется второй "\"

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 шт):

Автор решения: Dmitry

Это экранирование вашего символа \. Поскольлку символ слэша является спец символом необходимо явно показывать, что в данном случае данный символ будет частью последовательности, символом строки. Чтобы сделать символ частью строки, то надо перед символом поставить знак слэша. На заметку это не обязательно, можно использовать r-string. Ссылка в конце ответа

Наглядно можно посмотреть как работает экранирование на таком простом примере:

a = "\"abcde\"" 

где двойные кавычки экранируются и являются частью строки.
Если использовать одинарные кавычки, то экранирования можно избежать в данном конкретном случае, аналог

a = '"abcde"' 

оф док можно поизучать здесь

→ Ссылка
Автор решения: Michael Tetelev

Всё нормально, так и должно быть. Символ \ используется как экранирующий символ, чтобы строка вроде '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__(), отсюда и разное отображение.

→ Ссылка