Python清理PC端微信产生的超大数据

 

电脑上安装了PC版本的微信,最近发现C盘不够用了。一查发现微信的聊天记录能占到20G,当然微信自带了清理聊天记录。在家隔离期间,闲来无事用Python写了一个小方法来统计微信路径下Data文件夹下每年产生的数据量,并清理了指定年的数据。

涉及Python内置模块

  • os
  • datetime

涉及函数

  1. os模块中的listdir函数,返回指定文件夹下的文件及文件夹列表
  2. os.path.join函数,用于拼接文件路径
  3. os.path.isfile函数,判断参数是否为文件(注意:参数必须为完整的绝对路径)
  4. os.path.getctime函数,返回文件path的创建时间
  5. datetime.fromtimestamp函数,把参数时间戳转换成格式化日期时间并返回
  6. os.path.getsize函数,获取文件大小(字节)
  7. os.remove函数,用于删除指定的路径文件

代码示例

import os from datetime import datetime   # 字节转化KB\M\G def format_size(bt):     try:         bts = float(bt)         kb = bts / 1024     except Exception as e:         print(e)         return "Error"      if kb >= 1024:         M = kb / 1024         if M >= 1024:             G = M / 1024             return "%fG" % (G)         else:             return "%fM" % (M)     else:         return "%fkb" % (kb)    def get_data_size(path):     '''     :param path: 绝对路径     :return: 返回字典结构 年份为key value为该年所有文件的大小     '''     # 空字典用来存储按年计算的文件大小     year_files_size = {}     # 遍历该路径下所有的文件及文件夹     for item_file in os.listdir(path):         # 使用join方法拼接完整的绝对路径         full_path = os.path.join(path, item_file)         # 判断是否为文件         if os.path.isfile(full_path):             # 获取文件创建时间并格式化             t = datetime.fromtimestamp(os.path.getctime(full_path))             # 获取格式化后日期时间中的年份,判断是否在空字典中存在。如不存在设置年份为key,文件大小为value             # 否则进行value累加             if t.year not in year_files_size:                 year_files_size[t.year] = os.path.getsize(full_path)             else:                 year_files_size[t.year] += os.path.getsize(full_path)      # 格式化字节重新赋值     for k, v in year_files_size.items():         year_files_size[k] = format_size(v)      return year_files_size   def del_year_data(path, years):    '''          :param path: 绝对路径     :param years: 返回删除总条数     :return:      '''     total_num = 0     for item in os.listdir(path):         full_path = os.path.join(path, item)         if os.path.isfile(full_path):             t = datetime.fromtimestamp(os.path.getctime(full_path))             if t.year in years:                 os.remove(full_path)                 print("清理数据{}成功!".format(full_path))                 total_num += 1     print("共清理数据{}条".format(total_num))     return total_num   if __name__ == '__main__':     path = r"C:\Users\Documents\WeChat Files\xxxx\Data"     data = get_data_size(path)     print(data)     del_years = [2018]     del_year_data(path, del_years)

清理之前:

清理之后: 

 


电脑清理完后,可以放心睡觉了。应该是在家隔离闲的!