每次打开电脑的时候,看见win10壁纸很好看,好美,于是有了一个想法就想把它保存下来,但是操作好麻烦,所以用python写一个小脚本,每次只需要运行一下脚本就可以保存出来了,这样子方便多了~~

V1.0

需要导入包 os,shutil

  • 壁纸目录:C:\Users\【用户名】\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets
  • 将壁纸复制到wallpapers fold

1.建立wallpaper folder

  1. # 获取当前目录地址,并保存为save_folder
  2. os.getcwd
  3. if os.path.exists("wallpapers"):
  4. save_folder = os.getcwd()+"\wallpapers"
  5. else:
  6. os.mkdir("wallpapers")
  7. 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?

地址栏输入:

  1. %appdata% # 系统环境变量

python 获取变量环境路径

  1. os.getenv('LOCALAPPDATA') # 获取一个系统环境变量,如果没有返回None
  1. wallpaper_folder = os.getenv('LOCALAPPDATA') + (
  2. '\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy'
  3. '\LocalState\Assets')

3.读取原文件和复制文件

一.os.listdir得到一个列表

  1. 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)

  1. os.path.join
  2. # 通过路径的拼接活得完整资源的路径
  3. # Path1 = 'home'
  4. # Path2 = 'develop'
  5. # Path3 = 'code'
  6. # Path20 = os.path.join(Path1, Path2, Path3)
  7. # Path20 = home\develop\code
  1. # 通过路径的拼接活得完整资源的路径
  2. p_path = os.path.join(wallpaper_folder, p)

三.判断如果小于150kb的就不是锁屏图片,满足条件加上.JPG

  1. os.path.getsize(path) # 获取文件大小 单位:字节 BYTE
  2. os.path.getsize(p_path)/1024 # 单位:千字节KB
  3. new_p = p+".jpg"

四.拼接一个保存地址

已知:save_folder = os.getcwd()+”\wallpapers”

已知:new_p = p+”.jpg”

路径合并:os.path.join(路径1, 路径2)

  1. new_save_path = os.path.join(save_folder,new_p)

五.shutil.copyfile复制文件到指定路径

已知:p_path 完整资源的路径(文件在电脑的位置)

已知:new_save_path 保存地址

  1. shutil.copyfile(原地址,目标地址)
  1. for p in wallpaper_lists:
  2. # 通过路径的拼接活得完整资源的路径
  3. p_path = os.path.join(wallpaper_folder, p)
  4. # print(p_path)
  5. if (os.path.getsize(p_path)/1024) > 150:
  6. new_p = p+".jpg"
  7. new_save_path = os.path.join(save_folder,new_p)
  8. shutil.copyfile(p_path,new_save_path)
  9. print("ok",new_save_path)

4.其他资料


V1.1

更新——2020年4月13日

  1. 过滤同级文件非JPG的问题件
  2. 删除长方形图片

    需要增加导入包 from PIL import Image

    过滤非JPG文件

    用git做图床,手一贱贱,多了git,readme的文件,用os.listdir会输出所有的文件,如果不过滤会导致后面for循环打开图片读取宽度会出错,所以删除wallpaper_show(过滤)里面的两个值就好了
    (一度怀疑,写的这么详细,是怕自己阿尔兹海默症吗?)
    1. # 列表中包含其他文件需要过滤,得到一个新的列表
    2. wallpaper_show.remove('.git')
    3. wallpaper_show.remove('README.md')

    删除长方形图片

    Image.open 没有带关闭,执行的时候会报错,因为打开了的图片无法删除,判断宽度要先打开才能获取,所以用with open()处理,执行就可以了,思想就这样了
    1. # 读取所有图片的宽度
    2. for i in range(len(wallpaper_show)):
    3. files_name_path = save_folder + "/" + wallpaper_show[i]
    4. with open(files_name_path, 'rb') as f:
    5. im = Image.open(f)
    6. # 判断宽度不足1920的删除
    7. if im.size[0] != 1920:
    8. os.remove(files_name_path)
    9. print('删除', i, files_name_path, 'width:{}'.format(im.size[0]))