dreamrise 发表于 2021-9-3 10:07

python工具, 转储WIN10锁屏壁纸

1. 关于WINDOWS10 锁屏壁纸


C:\Users\MIS\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets备注一下:MIS:是你要的用户名文件夹Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy:这个文件夹是随机的。但是前面Microsoft.Windows.ContentDeliveryManager这一段是不会变的。其他的文件夹都是一样的。

https://answers.microsoft.com/zh-hans/windows/forum/windows_10/%E8%AF%B7%E9%97%AEwindows10%E9%94%81%E5%B1%8F/b454cdb8-dae4-4d8e-8a51-4ed3f08c4c97
2. 每个文件的MD5码储存在目标目录的 sqllite.db数据库文件中

3. 转储时, 对文件基于md5码判断是否为新文件, 如果是新文件就复制过来, 按现有的数字文件名, 存为 最大数字+1.jpg


4. 需手工随缘运行,未设置定时. 大概就是你哪天觉得今天的锁屏壁纸真漂亮的时候.


5. MS VS CODE 编写,已发gitee:复制WIN10锁屏壁纸.py · dreamrise/python_daily - 码云 - 开源中国 (gitee.com)


# 要添加一个新单元,输入 '# %%'
# 要添加一个新的标记单元,输入 '# %% '
# %%
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

# %%
import hashlib
import os
import datetime

def GetFileMd5(filename):
    if not os.path.isfile(filename):
      return
    myhash = hashlib.md5()
    f = open(filename,'rb')
    while True:
      b = f.read(8096)
      if not b :
            break
      myhash.update(b)
    f.close()
    return myhash.hexdigest()

# %%
import sqlite3

conn = sqlite3.connect('wallpaper.db')
cur = conn.cursor()


# %%
from pathlib import Path


def init_data(p):
    ''' 第一次才运行,初始化原始数据 '''
    try:
      cur.execute("""CREATE TABLE wallpapers ( id INT PRIMARY KEY, filename TEXT, md5 TEXT, Timestamp DATETIME DEFAULT CURRENT_TIMESTAMP);""")
    except:
      cur.execute("select count(*) from wallpapers")
      count = cur.fetchone()
      print(f"wallpapers 已为您记录{count}条数据")
      return

    datalist = []
    for x in list(p.glob('*.jpg')):      
      md5 = GetFileMd5(x)
      print(f"{x}:{md5}")
      datalist.append(tuple((str(x),md5)) )

    insert_table_wallpapers(datalist)# 第一次才运行


def insert_table_wallpapers(datalist):
    cur.executemany("INSERT INTO wallpapers (filename,md5)VALUES(?, ?);", datalist)
    print(f"插入数据量: {cur.rowcount}")
    conn.commit()

def search_table(filename,md5):
    cur.execute("select * from wallpapers where md5 = ? ", )# SQL的 params 参数必须是一个数组
    row = cur.fetchone()
    # print(row)
    if row:
      old_filename = row
      old_time = row
      print(f"旧文件:{filename}{md5} 已存在名为 {old_filename} 的文件 加入日期:{old_time}")
      return True
    else:
      print(f"新文件:{filename}{md5} 是一个新文件")
      return False


# %%

def get_max_filename_num(destination_path):
    p = destination_path   
    digits = []
    for x in list(p.glob('*.jpg')):
      isdigit_str = str(x.name).split(".")
      if isdigit_str.isdigit():
            digits.append(int(isdigit_str))
    max_num = max(digits) + 1
    return str(max_num) + ".jpg"


# %%
import shutil

if __name__ == "__main__":

    # new_file_name = get_max_filename_num()
    # print(new_file_name)

    source_path = Path(r'C:\Users\yulike\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets\.')
    destination_path = Path(r'D:\锁屏壁纸\.')

    init_data(destination_path)


    for x in list(source_path.glob('*')):
      md5 = GetFileMd5(x)
      print(f"{x.name}:{md5}")

      if not search_table(x.name,md5) :
            old_file = str(x)
            new_file = str(destination_path / get_max_filename_num(destination_path)) # 斜杠 / 操作符有助于创建子路径
            print(f"{old_file} => {new_file}")
            insert_table_wallpapers([(new_file,md5)])
            shutil.copyfile(old_file,new_file)

    X=input("按任意键退出")
   
页: [1]
查看完整版本: python工具, 转储WIN10锁屏壁纸