栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

【Python】解决最新电脑版微信[22-06]聊天文件统一按用户归类到MsgAttach文件夹的问题
  • 背景
  • 前提
  • 代码
    • 版本1
    • 版本2

背景

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

“WeChat Fileswxid_XXXXXXXXXXXXXXFileStorageFile”

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

“WeChat Fileswxid_XXXXXXXXXXXXXXFileStorageMsgAttach”

对于一个极度喜欢整理文件夹的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_XXXXXXXXXXXXXXFileStorage\File_X"  #需修改wxid_XXXXXXXXXXXXXX
meat_path = "D:\Documents\WeChat Files\wxid_XXXXXXXXXXXXXXFileStorage\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_XXXXXXXXXXXXXXFileStorage\File"  #需修改wxid_XXXXXXXXXXXXXX
meat_path = "D:\Documents\WeChat Files\wxid_XXXXXXXXXXXXXXFileStorage\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-文件夹的拷贝操作

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号