吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1516|回复: 0
收起左侧

[Python 转载] python工具, 转储WIN10锁屏壁纸

  [复制链接]
dreamrise 发表于 2021-9-3 10:07
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)


[Python] 纯文本查看 复制代码
# 要添加一个新单元,输入 '# %%'
# 要添加一个新的标记单元,输入 '# %% [markdown]'
# %%
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()[0]
        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 = ? ", [md5])  # SQL的 params 参数必须是一个数组
    row = cur.fetchone()
    # print(row)
    if row:
        old_filename = row[1]
        old_time = row[3]
        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(".")[0]
        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("按任意键退出")
    

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
lh141332366 + 1 + 1 我很赞同!
秋神紫羽 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 13:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表