Joshua1123 发表于 2021-6-30 21:10

微信文件自动分类整理

一、需求和问题:
日积月累,微信接收的文件非常多非常乱,现要按照不同的发送人和不同的群分类整理文件,但是微信默认的是按月份分类整理,如下:

二、思路
虽然接收的文件夹没有按照不同发送人和群分类整理,但是微信客户端还是提供了筛选的功能,如下:

1、利用筛选功能获取所有的文件和该文件来源于哪个发送人或群的信息,信息以字典方式存储——{文件名称:文件来源};
2、根据存储的发送人和群的信息,即根据文件来源创建对应文件夹;
3、遍历微信接收文件夹中的所有文件,结合存储的数据,将文件拷贝到新创建的相应的文件夹中。
三、工具
1、电脑客户端自动化——pywinauto;
2、窗口控件信息获取——winspect。
四、具体代码


from pywinauto import Desktop, Application
import pyautogui
import re
import os
import shutil

data_dic={}
folder_name=[]
file_name=[]

#启动微信
os.environ.update({"__COMPAT_LAYER":"RUnAsInvoker"})
app = Application(backend='uia').start(r'D:\Program Files (x86)\Tencent\WeChat\WeChat.exe')

#进入微信文件筛选界面
win_main_Dialog = Desktop(backend='uia').window(title='微信测试版')
wj=win_main_Dialog.window(title='微信文件')
wj.click_input()
win_main_Dialog = Desktop(backend='uia').window(title='微信文件')
wj2=win_main_Dialog.child_window(title='全部')
wj2.click_input()

#7条信息一个循环
def press_down():
    for i in range(7):
      pyautogui.press('down')
#读取数据函数   
def read_data():
    str_n='te'
    list_now=[]
    for i in range(1,8):
      #使用inspect探测元素定位,提取文件名
      fi_n=win_main_Dialog.children().children().children().children().children().children().children().children().children().children().children().children().children().children().children().children().window_text()
      #使用inspect探测元素定位,提取文件夹名,区分个人和群
      fo_n=win_main_Dialog.children().children().children().children().children().children().children().children().children().children().children().children().children().children().children().window_text()
      if fo_n[-3:] == '的聊天':
            fo_n=re.findall('与(.*)的聊天',fo_n)
      else:
            number=re.search(u"\|(.*?)",fo_n).span()+1
            fo_n=fo_n
      file_name.append(fi_n.strip())
      folder_name.append(fo_n.strip())
      #无法统计接收文件数量,滚动条下拉到底即读取结束,判断依据为前后7条截取的部分信息一致
      list_now.append(fi_n.strip()[:2])
      str_n+=fi_n.strip()[:2]
    return list_now,str_n

#数据提取
for i in range(5):
    wj2.type_keys("{TAB}")#切换到文件信息页面
str_b=read_data()#读取第一页
press_down()#两次向下点击,进入第二页
press_down()#两次向下点击,进入第二页
pyautogui.press('down')
str_n=read_data()#读取第二页
press_down()#向下点击,进入第二页
#循环提取直到结束
while str_b!=str_n:
    str_b=str_n
    str_n=read_data()
    press_down()

#数据存储
for i in range(len(file_name)):
    if file_name in data_dic:
      data_dic]+=]
    else:
      data_dic]=]

#根据提取的个人或群的文件夹名称,在迁移目的地文件夹创建对应文件夹,以便将相应文件存入
folder_path=r'd:/微信整理文件夹'
for i in set(folder_name):
    try:
      os.makedirs(os.path.join(folder_path,i))#创建分类文件夹
    except OSError:
      print(i)
         
#遍历所有微信接收文件,将文件拷贝到整理后的指定的文件夹中
for root,dirs,files in os.walk(r'D:\WeChat Files\wxid_mpxkxr21\FileStorage\File'):
    for file in files:
      old_path=os.path.join(root,file)#原始路径
      #文件名称调整,重复的文件,文件名后有多个'(1)'
      f_name=os.path.splitext(file)
      f_name_s=os.path.splitext(file)
      while f_name[-3:]=='(1)':
            f_name=f_name
            
      try:
            des_path_list=data_dic
            for j in des_path_list:
                des_path=os.path.join(folder_path,j,file)#新的文件路径
                shutil.copyfile(old_path,des_path)
      except KeyError:
            print('对应文件不存在')
            print(os.path.join(root,file))
      except OSError:
            print('文件夹名称不符合规范')
            print(os.path.join(root,file))

63513298 发表于 2021-6-30 21:43

6666

15887845691 发表于 2021-6-30 21:44

感谢楼主分享!大牛有你更精彩!

笑东风丶 发表于 2021-6-30 22:06

感谢大佬分享,大佬666666

xiang_yc 发表于 2021-6-30 22:30

多谢楼主分享

不复醒 发表于 2021-6-30 22:31

谢谢分享!

brian4487 发表于 2021-7-1 00:52


支持楼主,谢谢分享。

今心 发表于 2021-7-1 09:44

必须支持,谢谢大佬的额分享

不羁的风 发表于 2021-7-1 10:10


感谢楼主分享!

你说呢 发表于 2021-7-1 10:10

感谢楼主分享
页: [1] 2
查看完整版本: 微信文件自动分类整理