每次打开电脑的时候,看见win10壁纸很好看,好美,于是有了一个想法就想把它保存下来,但是操作好麻烦,所以用python写一个小脚本,每次只需要运行一下脚本就可以保存出来了,这样子方便多了~~
V1.0
需要导入包 os,shutil
- 壁纸目录:C:\Users\【用户名】\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets
- 将壁纸复制到wallpapers fold
1.建立wallpaper folder
# 获取当前目录地址,并保存为save_folder
os.getcwd
if os.path.exists("wallpapers"):
save_folder = os.getcwd()+"\wallpapers"
else:
os.mkdir("wallpapers")
save_folder = os.getcwd()+"\wallpapers"
2.动态获取,用户自定义设置目录路径(APPDATA)
什么是APPDATA?
AppData里有你在各种程序里的自定义设置,包括软件的个性化设置而不能影响其他用户的文件,临时文件夹,快速启动文件夹等。它是重要的系统文件夹。同时很多软件也会把主程序安装在AppData文件夹中。
APPDATA里面都有些什么?
有三个子文件夹local,locallow和roaming。
1、local\temp文件夹下,存放了一些解压文件,安装软件时,使用Photoshop处理图片缓存,体积非常大,占用很多空间。
2、locallow是用来存放共享数据
这两个文件夹下的文件,可以使用垃圾清理工具清理无用的文件。
3、roaming文件夹也是存放一些使用程序后产生的数据文件,如 空间听音乐,登入 的号码等而缓存的一些数据,
windows 如何打开APPDATA folder?
地址栏输入:
%appdata% # 系统环境变量
python 获取变量环境路径
os.getenv('LOCALAPPDATA') # 获取一个系统环境变量,如果没有返回None
wallpaper_folder = os.getenv('LOCALAPPDATA') + (
'\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy'
'\LocalState\Assets')
3.读取原文件和复制文件
一.os.listdir得到一个列表
wallpaper_lists = os.listdir(wallpaper_folder)
二.循环列表获取每个图片的名字
已知:wallpaper_folder = C:\Users\Tommy\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets\
已知:wallpaper_lists = [djskafiuwrui37849273892,djskafiuwrui37849273892]
完整地址= 固定的wallpaper_folder + 每一个 wallpaper_lists的名字
路径合并:os.path.join(路径1, 路径2)
os.path.join
# 通过路径的拼接活得完整资源的路径
# Path1 = 'home'
# Path2 = 'develop'
# Path3 = 'code'
# Path20 = os.path.join(Path1, Path2, Path3)
# Path20 = home\develop\code
# 通过路径的拼接活得完整资源的路径
p_path = os.path.join(wallpaper_folder, p)
三.判断如果小于150kb的就不是锁屏图片,满足条件加上.JPG
os.path.getsize(path) # 获取文件大小 单位:字节 BYTE
os.path.getsize(p_path)/1024 # 单位:千字节KB
new_p = p+".jpg"
四.拼接一个保存地址
已知:save_folder = os.getcwd()+”\wallpapers”
已知:new_p = p+”.jpg”
路径合并:os.path.join(路径1, 路径2)
new_save_path = os.path.join(save_folder,new_p)
五.shutil.copyfile复制文件到指定路径
已知:p_path 完整资源的路径(文件在电脑的位置)
已知:new_save_path 保存地址
shutil.copyfile(原地址,目标地址)
for p in wallpaper_lists:
# 通过路径的拼接活得完整资源的路径
p_path = os.path.join(wallpaper_folder, p)
# print(p_path)
if (os.path.getsize(p_path)/1024) > 150:
new_p = p+".jpg"
new_save_path = os.path.join(save_folder,new_p)
shutil.copyfile(p_path,new_save_path)
print("ok",new_save_path)
4.其他资料
V1.1
更新——2020年4月13日
- 过滤同级文件非JPG的问题件
- 删除长方形图片
需要增加导入包 from PIL import Image
过滤非JPG文件
用git做图床,手一贱贱,多了git,readme的文件,用os.listdir会输出所有的文件,如果不过滤会导致后面for循环打开图片读取宽度会出错,所以删除wallpaper_show(过滤)里面的两个值就好了
(一度怀疑,写的这么详细,是怕自己阿尔兹海默症吗?)# 列表中包含其他文件需要过滤,得到一个新的列表
wallpaper_show.remove('.git')
wallpaper_show.remove('README.md')
删除长方形图片
Image.open 没有带关闭,执行的时候会报错,因为打开了的图片无法删除,判断宽度要先打开才能获取,所以用with open()处理,执行就可以了,思想就这样了# 读取所有图片的宽度
for i in range(len(wallpaper_show)):
files_name_path = save_folder + "/" + wallpaper_show[i]
with open(files_name_path, 'rb') as f:
im = Image.open(f)
# 判断宽度不足1920的删除
if im.size[0] != 1920:
os.remove(files_name_path)
print('删除', i, files_name_path, 'width:{}'.format(im.size[0]))