用python為wallpaper engine批量新增本地視訊
阿新 • • 發佈:2019-01-07
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)