最近幫朋友處理一件工作的時(shí)候,發(fā)現(xiàn)其有很多文件歸納的任務(wù),其都是手工一個(gè)一個(gè)復(fù)制到新建的文件夾,工作機(jī)械且很容易出錯(cuò),這里寫(xiě)了一個(gè)文件自動(dòng)歸納整理的程序,能快速實(shí)現(xiàn)文件的自動(dòng)歸類(lèi)整理。
下面是一個(gè)所有人名資料混合在一起的一個(gè)文件夾,能看到有111個(gè)項(xiàng)目,如果人工一個(gè)一個(gè)復(fù)制很容易出錯(cuò)。現(xiàn)在的任務(wù)是需要將每個(gè)人的資料提取出來(lái),并且單獨(dú)存儲(chǔ)到各自的文件夾中。

匯總在一起的文件,需要根據(jù)人名進(jìn)行歸類(lèi)
示例代碼如下,執(zhí)行過(guò)程中將要進(jìn)行歸類(lèi)的文件路徑復(fù)制輸入即可:
import os
import re #導(dǎo)入正則模塊,提取姓名用
import shutil #導(dǎo)入用來(lái)移動(dòng)文件的模塊
while True: #循環(huán)輸入
path = input('請(qǐng)輸入要整理文件所在路徑') #記錄輸入的路徑
try:
list1 = os.listdir(path) #遍歷選擇的文件夾
#以下操作使用正則提取文件名的漢字部分做文件名使用
list2 = [re.findall(r'[\u4e00-\u9fa5]',str) for str in list1]
list=[]
for i in list2:
if i not in list:
list.append(''.join(i))
for j in range(0,len(list1)): #遍歷文件列表,這里仍然需要遍歷list1,因?yàn)閘ist1才是所有的文件,list只是一個(gè)單獨(dú)的姓名列表
filepath = os.path.join(path,list1[j]) #記錄遍歷到的文件名
if os.path.isfile(filepath): #判斷是否為文件
dirname = list[j] #使用處理過(guò)的list姓名列表里的姓名作為文件夾名
dirpath = os.path.join(path,dirname) #拼接文件夾路徑
if not os.path.exists(dirpath): #判斷文件夾路徑是否存在
os.mkdir(dirpath)
shutil.move(filepath,os.path.join(dirpath,list1[j])) #移動(dòng)文件進(jìn)行整理
print('整理完成。。。')
except:
print('請(qǐng)輸入一個(gè)有效路徑')
執(zhí)行結(jié)果如下,快速將各姓名文件歸類(lèi)到單獨(dú)的文件夾:

已經(jīng)歸類(lèi)好的文件夾
注:本例如果文件名的前面幾個(gè)字符數(shù)固定,如都是三個(gè)漢字,或者都是兩個(gè)漢字,就不需要單獨(dú)提取漢字的過(guò)程,直接使用切片提取文件名的前幾個(gè)字符作為文件夾的名字,流程相對(duì)簡(jiǎn)單。