文章目录

  • 问题
  • 解决
    • 成功截图
    • 读取文件的创建时间
    • 移动文件
    • 判断目录是否存在
    • 判断是否是重复文件
    • 创建文件夹
    • 遍历所有文件
    • 因此综合得到整体代码
    • 升级版,不仅按照日期,也按照格式进一步分类

问题

小米云盘只有5G,不经意间存了一些乱七八糟的东西,我希望将他们全部下载后然后清空小米云盘,这样小米云就不会偷偷地把一些我已经删掉的资料再同步给我的手机。
导致删不敢删,留着也烦人。我不希望那些公司玩弄我的资料。
下载后的文件自动按照时间分类创建一系列的文件夹分别存入下载的内容。
数千个文件按时间以及格式归类创建文件夹

解决

整体逻辑是读取所有的文件名字,找到文件后读取创建日期,格式信息,如果这个日期文件夹比如2020-2-1已经存在,再判断目标文件夹是否有重复文件,满足条件则将文件移入。否则创建一个新的创建日期的文件夹,然后移动入

成功截图

我要移动的文件有数千个,已经成功过了,因此这里放了一个测试的案例图片,只有两个文件。

读取文件的创建时间

os.stat() 方法
os.stat() 方法用于在给定的路径上执行一个系统 stat 的调用。
st_mode: inode 保护模式
st_ino: inode 节点号。
st_dev: inode 驻留的设备。
st_nlink: inode 的链接数。
st_uid: 所有者的用户ID。
st_gid: 所有者的组ID。
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
st_atime: 上次访问的时间。
st_mtime: 最后一次修改的时间。
st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

import os
import time
import datetime
def TimeStampToTime(timestamp):timeStruct = time.localtime(timestamp)return time.strftime('%Y-%m-%d %H:%M:%S',timeStruct)
imgPath = r'C:\Users\Administrator.DESKTOP-KMH7HN6\Desktop\need_main\temp\截屏\IMG_20210110_100531.jpg'
# ImageDate = datetime.datetime.strftime(time.ctime(os.stat(imgPath).st_mtime), "%Y-%m-%d %H:%M:%S")
a=os.stat(imgPath).st_mtime
print(TimeStampToTime(a))#2021-01-10 10:05:31
# print(ImageDate)

移动文件

import os,shutil
a=r"C:\Users\Administrator.DESKTOP-KMH7HN6\Desktop\111\a\1 (1).jpg"
b=r"C:\Users\1 (1).jpg"
shutil.move(a,b)#a->b

判断目录是否存在

import os
dirs = '/Users/'if not os.path.exists(dirs):os.makedirs(dirs)

判断是否是重复文件

import os
filename = '/Users/p.txt'if not os.path.exists(filename):os.system(r"touch {}".format(path))#调用系统命令行来创建文件

这个是判断文件是否存在的,肯定不对。
思路是得到文件夹下所有文件名字,然后用列表包含判断

        if filename in os.listdir(new_dir):print("重复文件,略过")passelse:move_file(new_dir)

创建文件夹

def manager_folders(path):if os.path.exists(path):passelse:os.makedirs(path)

遍历所有文件


import os
allFileNum = 0
myfile=[]
mydir=[]
def printPath(level, path):global allFileNum''''' 打印一个目录下的所有文件夹和文件 '''# 所有文件夹,第一个字段是次目录的级别dirList = []# 所有文件fileList = []# 返回一个列表,其中包含在目录条目的名称(google翻译)files = os.listdir(path)# 先添加目录级别dirList.append(str(level))for f in files:if (os.path.isdir(path + '/' + f)):# 排除隐藏文件夹。因为隐藏文件夹过多if (f[0] == '.'):passelse:# 添加非隐藏文件夹dirList.append(f)mydir.append(path + '/' + f)if (os.path.isfile(path + '/' + f)):# 添加文件fileList.append(f)myfile.append(path + '/' + f)# 当一个标志使用,文件夹列表第一个级别不打印i_dl = 0for dl in dirList:if (i_dl == 0):i_dl = i_dl + 1else:# print("得到的文件夹",'-' * (int(dirList[0])), dl)# 打印目录下的所有文件夹和文件,目录级别+1printPath((int(dirList[0]) + 1), path + '/' + dl)for fl in fileList:# print("得到的文件路径",'-' * (int(dirList[0])), fl)# 随便计算一下有多少个文件allFileNum = allFileNum + 1
myfirstpath = r"C:/Users/Administrator.DESKTOP-KMH7HN6/Desktop/111"
printPath(1, myfirstpath)
print(myfile)

因此综合得到整体代码


import os,shutil
import time
import datetime
allFileNum = 0
myfile=[]
mydir=[]
this_folder=input("原始路径:").replace("\\",'/')
those_folder=input("目标路径:").replace("\\",'/')
def printPath(level, path):global allFileNum'''''打印一个目录下的所有文件夹和文件'''# 所有文件夹,第一个字段是次目录的级别dirList = []# 所有文件fileList = []# 返回一个列表,其中包含在目录条目的名称(google翻译)files = os.listdir(path)# 先添加目录级别dirList.append(str(level))for f in files:if (os.path.isdir(path + '/' + f)):# 排除隐藏文件夹。因为隐藏文件夹过多if (f[0] == '.'):passelse:# 添加非隐藏文件夹dirList.append(f)mydir.append(path + '/' + f)if (os.path.isfile(path + '/' + f)):# 添加文件fileList.append(f)myfile.append(path + '/' + f)# 当一个标志使用,文件夹列表第一个级别不打印i_dl = 0for dl in dirList:if (i_dl == 0):i_dl = i_dl + 1else:# print("得到的文件夹",'-' * (int(dirList[0])), dl)# 打印目录下的所有文件夹和文件,目录级别+1printPath((int(dirList[0]) + 1), path + '/' + dl)for fl in fileList:# print("得到的文件路径",'-' * (int(dirList[0])), fl)# 随便计算一下有多少个文件allFileNum = allFileNum + 1#文件处理
def judge_file(oldPath,location):def TimeStampToTime(timestamp):timeStruct = time.localtime(timestamp)return time.strftime('%Y-%m-%d %H:%M:%S', timeStruct)def move_file(new_dir):old_file_name = oldPath.split("/")[-1]# 将文件移动到新文件夹shutil.move(oldPath, new_dir + '/' + old_file_name)  # a->bprint("-"*50+"已完成:%.2f" % ((location + 1) / allFileNum*100))# ImageDate = datetime.datetime.strftime(time.ctime(os.stat(imgPath).st_mtime), "%Y-%m-%d %H:%M:%S")a = os.stat(oldPath).st_mtime#得到文件创建时间,判断文件夹是否存在creat_time=TimeStampToTime(a)[:-9]print(creat_time) #str 2021-01-10 10:05:31new_dir="%s/%s"%(those_folder,creat_time)#不存在文件夹则创建文件夹if not os.path.exists(new_dir):os.makedirs(new_dir)move_file(new_dir)#如果存在就判断是否是重复文件else :if oldPath.split("/")[-1] in os.listdir(new_dir):print("重复文件,略过")passelse:move_file(new_dir)
def do_all():for i in myfile:judge_file(i,myfile.index(i))
printPath(1, this_folder)
do_all()
input()

升级版,不仅按照日期,也按照格式进一步分类


import os,shutil
import time
import datetime
allFileNum = 0
myfile=[]
mydir=[]
movie_file_format=['avi','mpeg','mp4','mov','ProRes','DNxHR','mfx','mkv','wmv','flv','rmvb','webm','asf']
text_file_format=['DOC','PDF','HTML','TXT','HTL','DOCX']
img_file_format=['bmp','jpg','jpeg','png','tif','gif','pcx','tga','exif','fpx','svg','psd','cdr','pcd','dxf','ufo','eps','ai','raw','WMF','webp','avif','hdri','flic','emf','ico']
zip_file_format=['rar' ,'zip','7z','CAB','ARJ','LZH','TAR','GZ','ACE','UUE','BZ2','JAR','ISO','MPQ']
music_file_format=['PCM','WAV','AIFF','MP3','AAC','OGG','WMA','FLAC','ALAC','WMA']
this_folder=input("原始路径:").replace("\\",'/')
those_folder=input("目标路径:").replace("\\",'/')
def printPath(level, path):global allFileNum'''''打印一个目录下的所有文件夹和文件'''# 所有文件夹,第一个字段是次目录的级别dirList = []# 所有文件fileList = []# 返回一个列表,其中包含在目录条目的名称(google翻译)files = os.listdir(path)# 先添加目录级别dirList.append(str(level))for f in files:if (os.path.isdir(path + '/' + f)):# 排除隐藏文件夹。因为隐藏文件夹过多if (f[0] == '.'):passelse:# 添加非隐藏文件夹dirList.append(f)mydir.append(path + '/' + f)if (os.path.isfile(path + '/' + f)):# 添加文件fileList.append(f)myfile.append(path + '/' + f)# 当一个标志使用,文件夹列表第一个级别不打印i_dl = 0for dl in dirList:if (i_dl == 0):i_dl = i_dl + 1else:# print("得到的文件夹",'-' * (int(dirList[0])), dl)# 打印目录下的所有文件夹和文件,目录级别+1printPath((int(dirList[0]) + 1), path + '/' + dl)for fl in fileList:# print("得到的文件路径",'-' * (int(dirList[0])), fl)# 随便计算一下有多少个文件allFileNum = allFileNum + 1
#文件处理
def judge_file(oldPath,location):def TimeStampToTime(timestamp):timeStruct = time.localtime(timestamp)return time.strftime('%Y-%m-%d %H:%M:%S', timeStruct)def get_file_format(file_path):file_name=file_path.split("/")[-1]if file_name.find(".")>0:file_format=file_name.split('.')[-1]if file_format.lower() in movie_file_format or file_format.upper() in movie_file_format:return "视频"elif file_format.lower() in text_file_format or file_format.upper() in text_file_format:return "文本"elif file_format.lower() in img_file_format or file_format.upper() in img_file_format:return "图片"elif file_format.lower() in music_file_format or file_format.upper() in music_file_format:return "音频"elif file_format.lower() in zip_file_format or file_format.upper() in zip_file_format:return "压缩"else:return "其他"else:return "文本"def move_file(new_dir):old_file_name = oldPath.split("/")[-1]# 将文件移动到新文件夹shutil.move(oldPath, new_dir + '/' + old_file_name)  # a->bprint("-"*50+"已完成:%.2f" % ((location + 1) / allFileNum*100))# ImageDate = datetime.datetime.strftime(time.ctime(os.stat(imgPath).st_mtime), "%Y-%m-%d %H:%M:%S")a = os.stat(oldPath).st_mtime#得到文件创建时间,判断文件夹是否存在creat_time=TimeStampToTime(a)[:-9]print(creat_time) #str 2021-01-10 10:05:31folder_format=get_file_format(oldPath)new_dir="%s/%s/%s"%(those_folder,creat_time,folder_format)#不存在文件夹则创建文件夹if not os.path.exists(new_dir):os.makedirs(new_dir)move_file(new_dir)#如果存在就判断是否是重复文件else :if oldPath.split("/")[-1] in os.listdir(new_dir):print("重复文件,略过")passelse:move_file(new_dir)
def do_all():for i in myfile:judge_file(i,myfile.index(i))
printPath(1, this_folder)
do_all()
input()

python-将文件按日期分类相关推荐

  1. 极速系列07—利用python将文件夹快速分类

    我们有一个文件夹,里面嵌套文件夹+文件,我们想将这些文件分类整理清楚,如何快速分类呢? 思路:读取文件夹中的所有文件,按照我们要分类的标准,制定规则(一定要能找到分类的标准,比如按照年份.文件名.文件 ...

  2. python下载文件加上日期_python拷贝文件夹中特定日期内的文件

    需求:遍历一个文件夹,将其中修改日期在2015-02-01--2015-02-20之间的文件拷贝出来,并且拷贝出来的文件要保持原来的目录结构. 实现代码(python3.3): # encoding: ...

  3. python下载文件加上日期_Python实现给下载文件显示进度条和下载时间代码

    本篇文章小编给大家分享一下Python实现给下载文件显示进度条和下载时间代码,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 该模块调用了三个库: 1. ...

  4. 利用python将文件夹中子文件夹中的图片数目大于小于指定的数目分类

    利用python将文件夹中子文件夹中的图片数目大于小于指定的数目分类 find ./ -name ".DS_Store" -depth -exec rm {} \;  Mac 删除 ...

  5. python保存文件到桌面_我用Python不到一分钟就将桌面文件整理分类!

    大家好,又到了Python办公自动化专题 本文跟大家分享一个文件整理脚本的实现过程.具体的功能很简单,给定一个打算整理的文件夹目录,这个脚本可以将该目录下的所有文件都揪出来,并且根据后缀名归类到不同的 ...

  6. python的文件操作、模块操作、os模块、time、datatime模块以及模块的制作

    Day12新手小白学python 第十二节 python的文件操作.模块操作.os模块.time.datatime模块以及模块的制作 目录 Day12新手小白学python 前言 一.文件打开关闭 二 ...

  7. 用python下载文件的若干种方法汇总

    压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...

  8. python时间计算_日期天数差计算(Python)

    描述 从json文件中读取两个时间数据(数据格式例如:2019.01.01,数据类型是字符串),并计算结果,打印出两个时间间隔了多少天. 输入/输出描述 输入描述 json文件名称datetime.j ...

  9. python从文件夹中提取指定文件_使用Python实现从各个子文件夹中复制指定文件的方法...

    之前用来整理图片的小程序,拿来备忘,算是使用Python复制文件的一个例子. # -*- coding: utf-8 -*- #程序用来拷贝文件并输出图片采集日期等其他信息到Excel中 #文件夹结构 ...

最新文章

  1. 获取 HTML5 网页设计灵感的10个网站推荐
  2. linux 关于虚拟内存的几个系统调用
  3. java controller json_Controller 获取 JSON
  4. gmat模考_国外GMAT高分学霸们都在用什么复习资料?(模考篇)
  5. 推荐系统中稀疏特征 Embedding 的优化表示方法
  6. linux编译多个函数,Swift on Linux —— 多文件协同编译
  7. bzoj3545/bzoj3551 [ONTAK2010]Peaks/Peaks加强版
  8. Boost Log : Trivial logging with filters
  9. 工作流软件是未来web的支柱
  10. 赫尔默特方差分量估计Python
  11. 【实习之T100开发(1),韩顺平Java视频教程百度云盘
  12. jmeter脚本录制http/https
  13. 体育硕士代码_研究生专业代码是什么
  14. speedoffice(PPT)如何在幻灯片里面插入表格呢
  15. 优秀博士生和普通博士生差距能有多大?
  16. 中央电视台最常用的 100 首经典背景乐曲(视频制作音乐推荐) 2009-05-12 17:31:47
  17. python for x in range(0,10) 例如使用python打印9*9乘法表
  18. 以太坊Geth私链环境搭建
  19. 云痕大数据 家长登录_1 云痕家长操作手册
  20. python微妙级sleep

热门文章

  1. 金三银四面试“超全秘籍”
  2. 自由枪骑兵修改服务器端口,自由枪骑兵 Freelancer 更改高分辨率(支持宽屏)方法...
  3. 北京朝阳区电子眼查询
  4. 如何实施 SCRUM
  5. 深入学习JavaScript
  6. [Beta]postmortem
  7. html怎么保存文档,html保存
  8. Edge浏览器移除桔梗网页的方法
  9. TDengine下载安装以及Unable to resolve FQDN解决还有Java配置
  10. c++ ransac