2017-02-07 25 views
1

Я пытаюсь загрузить несколько изображений с MomentumDash (только для образовательной цели). Я написал следующий код питона:Загрузка изображений не задан как фон?

import urllib 
import os 
import random 


#Chooses an image between 1 to 14 
choice=random.randint(01,14) 
print choice 

#Downloads images 
a=urllib.urlretrieve("https://momentumdash.com/backgrounds/"+"%02d" % (choice,)+".jpg", str(choice)+".jpg") 
print a #Tells the image 

#Getting the location of the saved image 
cwd = os.getcwd() 
random=random.choice(os.listdir(cwd)) 
file =cwd+ '\\' +random 

#Making the image to desktop image 
import ctypes 
SPI_SETDESKWALLPAPER = 20 
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER , 0, file, 3) 

Дело в том, что вероятность такого progrm, чтобы установить изображение является 1/7 иш.
Большую часть времени он дает черный фон.
Где я ошибаюсь?

+0

'os.listdir()' предоставит вам список всех файлов в данном каталоге - есть ли файлы, отличные от изображений, которые вы загружаете в своем рабочем каталоге? (подсказка: этот скрипт python) – asongtoruin

+0

Сначала используйте другое имя переменной для 'random', вы переписываете имя библиотеки. Во-вторых, напечатайте то, что вы получите для 'os.listdir (cwd)', скорее всего, некоторые из записей не подходят для файлов изображений. –

ответ

2

Попробуйте следующее. Это гарантирует, что список каталогов будет отфильтрован, чтобы предоставить вам только файлы jpg. Из них берется случайная запись. Также os.path.join() используется для безопасного присоединения к вашему пути и имени вместе.

import urllib 
import os 
import random 
import ctypes 

#Chooses an image between 1 to 14 
choice = random.randint(1, 14) 

#Downloads images 
download_name = "{:02}.jpg".format(choice) 
a = urllib.urlretrieve("https://momentumdash.com/backgrounds/{}".format(download_name), download_name) 

#Getting the location of the saved image 
cwd = os.getcwd() 

#Filter the list to only give JPG image files 
image_files = [f for f in os.listdir(cwd) if os.path.splitext(f)[1].lower() == ".jpg"] 
random_image = random.choice(image_files) 
full_path = os.path.join(cwd, random_image) 

#Making the image to desktop image 
SPI_SETDESKWALLPAPER = 20 
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER , 0, full_path, 3)   

Список файлов фильтруется с помощью list comprehension функции Питона. Это способ создания нового списка из существующего элемента. В этом случае он использует необязательный оператор if только для включения файлов в новый список с расширением .jpg.

+0

не думал о том, чтобы заставить расширение «.jpg», +1 – asongtoruin

+0

Замечательный ответ! Не могли бы вы подробно рассказать об этом синтаксисе? 'image_files = [f для f в os.listdir (cwd), если os.path.splitext (f) [1] .lower() ==" .jpg "]' –

+1

Это называется пониманием списка, которое является функцией языка Python. Я добавил ссылку в ответ. –

1

Попробуйте следующее:

import urllib 
import os 
import random 
import ctypes 

# Set up an output folder 
out_folder = os.path.join(os.getcwd(), 'Backgrounds') 

# Make it if it doesn't exist 
if not os.path.isdir(out_folder): 
    os.mkdir(out_folder) 

# Loop through all values between 1 and 15 
for choice in range(1,15): 
    #Downloads images 
    a = urllib.urlretrieve("https://momentumdash.com/backgrounds/" + "%02d" % (choice,)+".jpg", 
          os.path.join(out_folder, "{}.jpg".format(choice)) 
          ) 

selected_wallpaper = random.choice(os.listdir(out_folder)) 

#Making the image to desktop image 
SPI_SETDESKWALLPAPER = 20 
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, os.path.join(out_folder, selected_wallpaper), 3) 

Это создает папку с именем Backgrounds в текущем рабочем каталоге, сохраняет все изображения там, а затем выбирает один случайным образом.

+0

Никогда не думал о создании новой папки, хороший! –