今天刚上班,女朋友给我来了个需求,她需要一个抽奖程序,需求如下:
1、要一个抽奖程序,输入为很多图片,输出为随机选出几张符合要求的图片
2、简单快速,不用界面也行,她早上就要
我只是一个小小的码农,怎么会做如此高大上的东西,我甚至于一口回绝。她抛出了极具诱惑性的条件,晚饭多加一瓶可乐。啥,这么看不起我,就一瓶可乐,呵呵,年轻人不讲武德,耗子尾汁。她又说,再加五块,接不接。好了,我接,这个需求必须接。倒不是看上了那五块钱,毕竟钱财乃身外之物,我也视金钱如粪土,嗯,真香。
思路:
1、她要的紧急,用Python写,也方便。
2、整个目录下分为了三个部分,①输入的图片文件夹,不能让她手动输入,她会杀了我的。②输出的图片文件夹,也就是随机选出的结果。③脚本文件和配置文件xml
3、程序初始化,读取配置文件中的输入文件夹和输出文件夹的名字,并且清空输出文件夹,因为可能程序会多次运行。
4、主体程序代码异常简单,就是一个random而已。
工程截图:
end_pic -> 脚本程序随机选出的文件的放置目录,拷贝一份放到end_pic
pictures -> 要随机的所有图片的放置目录
choujiang.py -> 抽奖脚本代码
config.xml -> 配置文件
直接看吧,翠花,上酸菜
1、先给pictures里放好多好多图
2、config.xml
<?xml version="1.0" ?>
<config>
<path>pictures</path>
<end_pic>end_pic</end_pic>
</config>
3、choujiang.py 原谅我拼音命名大法
# -*- coding: UTF-8 -*-
import random
import ctypes
import time
import os
from xml.dom.minidom import parse
import datetime
import shutil
picture_list = []
path = ''
end_pic = 'end_pic'
luck_num = 2 #抽出几张图片 最好数量远小于抽奖池
def build_path(args) :
end_path = os.getcwd()
for arg in args :
end_path = end_path + '\\' + arg
return end_path
def init_pic() :
end_path = build_path([path])
g = os.walk(end_path)
for _,_,filelist in g :
for filename in filelist:
if filename.endswith('jpg'):
picture_list.append(filename)
if picture_list :
return True, end_path
return False, None
#随机图片
def random_pic_index() :
return picture_list[random.randint(0, len(picture_list)-1)]
#读XML配置
def read_xml() :
doc = parse('./config.xml')
root = doc.documentElement
global path, random_time
path = root.getElementsByTagName('path')[0].firstChild.data
end_pic = root.getElementsByTagName('end_pic')[0].firstChild.data
#清空目标文件夹
def clear_end_pic() :
path = os.getcwd() + '\\' + end_pic
#print ('======%s' %str(path))
for file in os.listdir(path) :
file_data = path + '\\' + file
if os.path.isfile(file_data) :
#print(file_data)
os.remove(file_data)
def main() :
read_xml()
flag, end_path = init_pic()
if not flag or not end_path :
print('Init error, not have pictures(filename with .jpg)')
exit (1)
clear_end_pic()
#给随机数一个种子
random.seed(int(time.time()))
luck_filenames = []
#可能会有重复的 多跑十次,还有重复就算了
for i in range(0, luck_num+10) :
filename = random_pic_index()
if filename in luck_filenames :
continue
luck_filenames.append(filename)
print('%s picture: %s' %(datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S'), filename))
#拷贝文件
shutil.copyfile(end_path+'\\'+filename, os.getcwd()+'\\'+end_pic+'\\'+filename)
if len(luck_filenames) >= luck_num :
break
input('Please enter and then exit!!!')
main()
在Python3环境下,运行脚本choujiang.py,运行后截图如下:
end_pic文件夹下会拷贝一份已经选出的图片:
一切搞定,五块钱到手~~~~