【Python】解决最新电脑版微信[22-06]聊天文件统一按用户归类到MsgAttach文件夹的问题

针对微信最新版聊天文件按用户归档在MsgAttach文件夹的问题,作者利用Python编写代码进行整理。文章介绍了背景及前提条件,提供了两个版本的Python代码,将MsgAttach下的文件按月份或统一复制到指定目录。

【Python】解决最新电脑版微信[22-06]聊天文件统一按用户归类到MsgAttach文件夹的问题

背景

最近,微信又更新了,但这一版本的聊天文件安排方式变化有点大,
之前是按月份分类统一放到File文件夹下

“WeChat Files\wxid_XXXXXXXXXXXXXX\FileStorage\File”

目前是按聊天用户分类统一放到MsgAttach文件夹下

“WeChat Files\wxid_XXXXXXXXXXXXXX\FileStorage\MsgAttach”

对于一个极度喜欢整理文件夹的ISTJer来说,短时间呢必然是不能接受这样的改变的,
于是自己动手,丰衣足食,用几行Python代码来解决此问题。

前提

python os、shutil 模块
技巧 list.extend() dict.get()

代码

版本1

该文件将 MsgAttach目录下的目录过滤后按月份分类复制到File_X目录下,使用时需要自行修改原目录和目标目录中的wxid

import os
import shutil
# from utils import mkdir

def mkdir(path):
    if not os.path.exists(path):
        os.makedirs(path)
        print("mkdir at {}".format(path))
    return path

def get_sub_path(path):
    path_list = ["{}\\{}".format(path, _) for _ in os.listdir(path)]
    return path_list

copy_path = "D:\\Documents\\WeChat Files\\wxid_XXXXXXXXXXXXXX\FileStorage\\File_X"  #需修改wxid_XXXXXXXXXXXXXX
meat_path = "D:\\Documents\\WeChat Files\\wxid_XXXXXXXXXXXXXX\FileStorage\\MsgAttach"  #需修改wxid_XXXXXXXXXXXXXX
path_list = get_sub_path(meat_path)
final_path_list = []
final_path_list.extend(["{}\\File".format(path) for path in path_list if "File" in os.listdir(path)])  # 过滤
# print(final_path_list)

month_path_list = []
for path in final_path_list:
    month_path_list.extend(get_sub_path(path))
# print(month_path_list)

month_path_dict = {}
for path in month_path_list:
    key = path[-7:]
    # print(month_path_dict[key])
    if not month_path_dict.get(key):
        month_path_dict[key] = []
    month_path_dict[key].append(path)
# print(month_path_dict)

#  按月份复制
for month, path_list in month_path_dict.items():
    file_list = []
    for path in path_list:
        file_list.extend(get_sub_path(path))

    new_path = mkdir("{}\\{}".format(copy_path, month))
    for file_path in file_list:
        file_name = file_path.split("\\")[-1]
        new_file_path = "{}\{}".format(new_path, file_name)
        try:
            shutil.copy(file_path, new_path)
            print("copy {} from {} to {}".format(file_name, file_path, new_path))
        except Exception as e:
            print(e)
    print()

版本2

该文件将 MsgAttach目录下的文件过滤后按统一复制到File_All目录下,使用时需要自行修改原目录和目标目录中的wxid

import os
import shutil
# from utils import mkdir

def mkdir(path):
    if not os.path.exists(path):
        os.makedirs(path)
        print("mkdir at {}".format(path))
    return path

def get_sub_path(path):
    path_list = ["{}\\{}".format(path, _) for _ in os.listdir(path)]
    return path_list

copy_path = "D:\\Documents\\WeChat Files\\wxid_XXXXXXXXXXXXXX\FileStorage\\File"  #需修改wxid_XXXXXXXXXXXXXX
meat_path = "D:\\Documents\\WeChat Files\\wxid_XXXXXXXXXXXXXX\FileStorage\\MsgAttach"  #需修改wxid_XXXXXXXXXXXXXX
path_list = get_sub_path(meat_path)
final_path_list = []
final_path_list.extend(["{}\\File".format(path) for path in path_list if "File" in os.listdir(path)])
# print(final_path_list)

copy_path = mkdir("{}_all\\".format(copy_path))
for path in final_path_list:
    if os.path.exists(path):
        # root 所指的是当前正在遍历的这个文件夹的本身的地址
        # dirs 是一个 list,内容是该文件夹中所有的目录的名字(不包括子目录)
        # files 同样是 list, 内容是该文件夹中所有的文件(不包括子目录)
        for root, dirs, files in os.walk(path):
            for file in files:
                src_file = os.path.join(root, file)
                shutil.copy(src_file, copy_path)
                print(file)
                # print("copy {} from {} to {}".format(file, src_file, copy_path))

版本2 部分代码 参考 Python-文件夹的拷贝操作

评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值