Я работаю над небольшим проектом, где у меня есть папка, которая содержит около 20 фотографий. Я сделал цикл for, используя os.listdir, и он правильно выводит все имена фотографий в консоль.

Основная проблема заключается в том, что я хочу, чтобы он случайно выбрал одну из фотографий в папке и распечатал ее имя. Что происходит, так это то, что он делает что-то еще и печатает несколько однобуквенных символов на консоли.

for photos in os.listdir(photoPath):
    if photos.endswith(".jpg"):
        choice = random.choice(photos)
        print(choice)

Выход:

J
B
p
_
g
O
C
K
j
.
.
_
_
L
_
_
D
.
g
_
j
E
N
_
.
E
F
.
g
F
_
_
_
g
j
K
g
_
.
_
j
p
.
.
p
0
user9488619 14 Мар 2018 в 04:53

2 ответа

Лучший ответ

Давайте рассмотрим это:

# A loop where photos is a filename
for photos in os.listdir(photoPath):
    # Check if photos ends with '.jpg'
    if photos.endswith(".jpg"):
        # Choose a random letter from photos
        choice = random.choice(photos)
        # Print that letter
        print(choice)

Правильный способ сделать это с помощью понимания списка:

print(random.choice([photos for photos in os.listdir(photoPath) if photos.endswith(".jpg")]))
0
luther 14 Мар 2018 в 02:05

os.listdir(photoPath) уже вернет вам список фотографий, поэтому, если вы хотите случайно выбрать одну, используйте random.choice(os.listdir(photoPath)). Из вашего кода photos - это просто название этой фотографии, а не весь список фотографий.

0
Da_Pz 14 Мар 2018 в 01:58