好久没有更新啦,今天分享一小段代码来实现对文件的分类。实现的效果:将文件夹(SoftwareDevelopment)中的文档、代码、图片等复制一份到指定的目录中归类。知乎视频www.zhihu.com导入内置库
import os,shutil,timeos : 用户判断文件是否为目录 ,以及文件是否存在✅。
shutil:对文件 进行copy操作
time:记录 程序运行时间⌚️
2. 构建函数
def FileSort(dir_name):
dir_list = []
Development_target = r'/Users/kkming/Development'
Document_target = r'/Users/kkming/Document'
Other_target = r'/Users/kkming/Other'
#列出将当前目录下所文件,文件夹
All_file = os.listdir(dir_name)
for file_name in All_file:
absolute_path = dir_name + "/" + file_name
if os.path.isdir(absolute_path):
dir_list.append(absolute_path)
elif absolute_path[-5:]=='.java' or absolute_path[-3:] == '.py' or absolute_path[-2:] == '.c':
shutil.copy(absolute_path,Development_target)
print('{:}'.format(absolute_path,'Copy',Development_target))
elif absolute_path[-4:] in ['.doc','.PPT','.pdf'] or absolute_path[-5:] == '.xlsx':
shutil.copy(absolute_path,Document_target)
print('{:}'.format(absolute_path, 'Copy', Document_target))
else:
shutil.copy(absolute_path,Other_target)
print('{:}'.format(absolute_path, 'Copy', Other_target))这段代码的逻辑很简单,我们将需要归类的文件夹中所有文件 +文件夹 都一一列出,并拼接它们的绝对路径。然后基于文件的后缀名称进行判断,通过if-elif-else的逻辑结构将它们分好类,并加入到指定的目标文件夹中。
真实的环境中,我们在一个文件夹中可能包含很多子文件夹,这里我们需要使用递归的方式来让函数调用自己去完成子文件夹中文件的分类。
for dir_path in dir_list:
os.chdir(dir_path)
FileSort(dir_path)最后我们提示用户输入指定的归类目录,在这里我们添加上try-except的逻辑结构,增加程序的稳定性,避免给用户恶劣的报错体验。其中我们还使用OS模块添加了一个小小的判断,来确认文件夹是否真实存在。
try:
source = input('Please input you want to sort of Folder:')
if os.path.exists(source):
FileSort(source)
print('Total Time:{:.2f}'.format(time.perf_counter() - start))
else:
print('The Folder you entered does not exist')
except:
print('Your input is incorrect,Please refer:/Users/kkming/SoftwareDevelopment')
3. 完整代码
import os,shutil,time
start = time.perf_counter()
"""
定义文件夹处理函数
"""
def FileSort(dir_name):
dir_list = []
Development_target = r'/Users/kkming/Development'
Document_target = r'/Users/kkming/Document'
Other_target = r'/Users/kkming/Other'
#列出将当前目录下所文件,文件夹
All_file = os.listdir(dir_name)
for file_name in All_file:
absolute_path = dir_name + "/" + file_name
if os.path.isdir(absolute_path):
dir_list.append(absolute_path)
elif absolute_path[-5:]=='.java' or absolute_path[-3:] == '.py' or absolute_path[-2:] == '.c':
shutil.copy(absolute_path,Development_target)
print('{:}'.format(absolute_path,'Copy',Development_target))
elif absolute_path[-4:] in ['.doc','.PPT','.pdf'] or absolute_path[-5:] == '.xlsx':
shutil.copy(absolute_path,Document_target)
print('{:}'.format(absolute_path, 'Copy', Document_target))
else:
shutil.copy(absolute_path,Other_target)
print('{:}'.format(absolute_path, 'Copy', Other_target))
#使用递归的方式处理子目录
for dir_path in dir_list:
os.chdir(dir_path)
FileSort(dir_path)
try:
source = input('Please input you want to sort of Folder:')
if os.path.exists(source):
FileSort(source)
print('Total Time:{:.2f}'.format(time.perf_counter() - start))
else:
print('The Folder you entered does not exist')
except:
print('Your input is incorrect,Please refer:/Users/kkming/SoftwareDevelopment')
4. 代码输出
5. 效果展示
-待归类目录:SoftwareDevelopment
-归类后目录:Development
-归类后目录:Document
-归类后目录:Other