用python为wallpaper engine批量添加本地视频

wallpaper engine可以用本地视频作为桌面背景,如果电脑里有很多电影、电视剧、动画之类的想随机播放,一个一个添加还是很困难的,本文用python写一个脚本,修改wallpaper engine的配置文件,把指定目录下的视频全部添加进来。算是学习python的一个小例子吧。

#-*- coding: utf-8 -*-
import json
import os
import io
import re

#输入一个目录,返回目录下所有的视频文件(包括子目录)
def getFileList(file_dir):
    L = []
    #筛选用的扩展名,列出wallpaper engine支持的视频文件类型
    extNames=['.mp4','.wmv','.avi','.m4v','.mov','.webm','.mkv']
    for root, dirs, files in os.walk(file_dir):
        for file in files:
            extName=os.path.splitext(file)[1]
            if extName in extNames:
                L.append(os.path.join(root, file))
    return L
#默认的wallpaper engine配置文件路径
filename="C:\Program Files (x86)\Steam\steamapps\common\wallpaper_engine\config.json"
#用with而不是直接f=open(filename,'r'),可以保证文件打开失败程序继续运行
#然而对这个程序来说没什么用
with open(filename,'r') as f:
    #按utf-8编码打开json
    data=json.load(f,encoding="utf-8")
    #找到localfiles元素,这里的Noah是这台电脑的用户名
    #在修改wallpaper engine的设置时,经常出现没有用户名而直接跳到general的情况
    #我也不知道为什么,所以这里应该根据实际情况修改
    listOri=data["Noah"]["general"]["localfiles"]
    #将本地视频列表与已有的列表合并
    listNew=getFileList(u'D:\Download\视频')+listOri
    #去掉重复的文件路径
    listN=[]
    for li in listNew:
        if li not in listN:
            listN.append(li)
    #将列表赋值给json元素
    data["Noah"]["general"]["localfiles"]=listN
    #这里打开文件与上面不同,因为默认的open不能设置编码格式
    with io.open(filename,'w', encoding='utf-8') as f:
        #ensure_ascii=False:json.dump默认忽略特殊字符
        #indent=4:子元素缩进四格
        str=json.dumps(data, ensure_ascii=False,indent=4)
        #将缩进替换为‘\t’,这是python3.2之前的写法,之后可以直接设置indent='\t'
        #从别处抄来的,没看懂
        str = re.sub('\n +', lambda match: '\n' + '\t' * (len(match.group().strip('\n')) / 3), str)
        f.write(str)

你可能感兴趣的:(python)