微信文件自动分类整理
一、需求和问题:日积月累,微信接收的文件非常多非常乱,现要按照不同的发送人和不同的群分类整理文件,但是微信默认的是按月份分类整理,如下:
二、思路
虽然接收的文件夹没有按照不同发送人和群分类整理,但是微信客户端还是提供了筛选的功能,如下:
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))
有具体的使用方法吗,这个真的是太棒了 Traceback (most recent call last):
File "D:\MF\WechatFIlesOrganized.py", line 53, in <module>
str_b=read_data()#读取第一页
File "D:\MF\WechatFIlesOrganized.py", line 35, in read_data
fi_n=win_main_Dialog.children().children().children().children().children().children().children().children().children().children().children().children().children().children().children().children().window_text()
IndexError: list index out of range 有没具体的使用教程 这个好用,咋用呢 怎么用呢?期待中…… 赞一个, 如果能搞成傻瓜版就好了 这个挺实用的 不然有时候想删东西 又怕删了有用的 谢谢分享PY知识。 使用教程????????? pywinauto.findwindows.ElementNotFoundError: {'title': '微信测试版', 'top_level_only': True, 'backend': 'uia'}