微信的文件管理非常糟糕,不论是聊天中的自动接收的附件、视频、图片,还是手动保存的文件,都保存在一个文件夹内。不仅占据大量手机存储,而且成千上万的小文件夹在一个文件夹内,不仅查找、管理困难,甚至列个目录都极慢。
对于占据手机存储的问题,我采用同步后删除的方式,每天将微信的附件、视频、图片等全部复制到家庭NAS内,然后删除,一下子清理出几十G空间。每天同步,既保证数据不丢失,又能保证手机空间占用最小。
接下来,需要对移动到NAS上的微信文件,按照年月甚至日建立文件夹,将文件按日期移动到文件夹内。
python代码如下:
#encoding-utf8
import sys
import os
import time
import datetime
for file in os.listdir("./"):
#只处理文件,不处理文件夹
if os.path.isdir(file):
continue
#获取文件真实的创建日期
createdate=datetime.datetime.fromtimestamp(os.stat(file).st_mtime)
#创建年份文件夹
year=createdate.strftime("%Y")
if not os.path.exists(year):
os.makedirs(year)
#创建月份文件夹
month=createdate.strftime("%m")
mpath=year + "/" + month
if not os.path.exists(mpath):
os.makedirs(mpath)
print(file+" created date:"+createdate.strftime("%Y-%m-%d"))
#按创建日期将文件移到对对应的年月文件夹内
cmd="mv \""+file+ "\" "+ mpath
print(cmd)
os.system(cmd)
需要说明的是,python 文件创建时间如何获取。CSDN以及很多文章,都用st_ctime来获取文件创建时间。实际执行的时候发现,st_ctime获取的不是dir或ls时显示的文件日期,而是我们最后移动或复制这个文件的日期。
按照struct stat 定义:
time_t st_atime; /* time of last access -最近存取时间*/
time_t st_mtime; /* time of last modification -最近修改时间*/
time_t st_ctime; /* time of last status change -最后权限修改时间 */
因此,本文采用st_mtime,测试结果显示,与dir/ls显示的文件日期一致。
遗留问题:
以上代码还有个遗留问题,就是生成的mv指令,虽然用双引号给解决了中文文件名问题,但对于文件名前缀有“-”等特殊字符的情况,还没有处理。请各位指点。