import os, zipfile, glob, time
def get_extention(my_fn):
'''
my_fn='E:\\0000\\hgf\\2018-1.2-14_105614.png'
'''
str_split=my_fn.split('\\')
if '\\' in my_fn: #如果含有'\\',则必有文件夹名,找到最后一个'\\'的索引
n=0
for i in my_fn:
if i=='\\':
dash_index=n
n+=1
mid0=my_fn[0:dash_index+1]
mid12=my_fn[dash_index+1:]
if '.' in mid12: #如果mid12含有'.',找到最后一个'.'的索引
n=0
for i in mid12:
if i=='.':
spot_index=n
n+=1
mid1=mid12[0:spot_index]
mid2=mid12[spot_index:]
else:#没有'.',则文件名无后缀名
mid1=mid12
mid2=''
else:#没有'\\',则只是文件名,找到最后一个'\\'的索引
mid0=''
mid12=my_fn
if '.' in mid12: #如果mid12含有'.',找到最后一个'.'的索引
n=0
for i in mid12:
#print(i)
if i=='.':
spot_index=n
n+=1
mid1=mid12[0:spot_index]
mid2=mid12[spot_index:]
else:#没有'.',则文件名无后缀名
mid1=mid12
mid2=''
return(mid0,mid1,mid2)
def FilesAndEmptyFolders(mydir, filesTypeIncluded=[], filesTypeExcluded=[], onlyFiles=False, onlyEmptyFolders=False):
'''
mydir='E:\\BACKUP\\BlueDict\\'
USAGE:
l = FilesAndEmptyFolders(mydir=os.getcwd()+'\\', filesTypeIncluded=['.mp3','.lrc'], filesTypeExcluded=[], onlyFiles=True, onlyEmptyFolders=False)
for i in l:
print([i])
'''
mydir = mydir.rstrip('\\')
my_EmptyDirs=[]
all_Files=[]
# 遍历目录/文件夹
for (croot, dirs, files) in os.walk(mydir):
#print([croot, dirs, files], '\n======')
# 该目录下没有子目录,也没有文件,为空文件夹
if len(dirs) == 0 and len(files) == 0:
my_EmptyDirs.append(croot+'\\')
# 遍历该目录下的所有文件
for f in files:
all_Files.append(croot+'\\'+f)
#print(my_EmptyDirs)
#print(all_Files)
###### Files
# 1
if len(filesTypeIncluded) == 0 and len(filesTypeExcluded) == 0:
Files_Needed = all_Files
# 2
elif len(filesTypeIncluded) != 0 and len(filesTypeExcluded) == 0:
Files_Included = []
for file in all_Files:
file_ext = get_extention(file)[2]
for ext in filesTypeIncluded:
if file_ext == ext:
Files_Included.append(file)
Files_Needed = list(set(all_Files)&set(Files_Included))
# 3
elif len(filesTypeIncluded) == 0 and len(filesTypeExcluded) != 0:
Files_Excluded = []
for file in all_Files:
file_ext = get_extention(file)[2]
for ext in filesTypeExcluded:
if file_ext == ext:
Files_Excluded.append(file)
Files_Needed = list(set(all_Files)-set(Files_Excluded))
else:
raise("'filesTypeIncluded'与'filesTypeExcluded'参数只能填一个")
####
if onlyFiles == False and onlyEmptyFolders == False:
final = Files_Needed + my_EmptyDirs
elif onlyFiles == True and onlyEmptyFolders == False:
final = Files_Needed
elif onlyFiles == False and onlyEmptyFolders == True:
final = my_EmptyDirs
elif onlyFiles == True and onlyEmptyFolders == True:
raise("'onlyFiles'与'onlyEmptyFolders'至多只有一个为True")
return final
def cwd_zipping():
os_cwd = os.getcwd()
time_string='____'+time.strftime("%Y-%m-%d, %H-%M-%S", time.localtime())
zipfilename="%s%s.zip"%(os_cwd, time_string)
zf = zipfile.ZipFile(zipfilename, "w", zipfile.ZIP_DEFLATED)
l = FilesAndEmptyFolders(mydir=os_cwd+'\\', filesTypeExcluded=['.mp3','.pdf','.exe','.mdx','.mdd'])
for i in l:
print([i])
i_=i[0:len(os_cwd)].split('\\')[-1]+i[len(os_cwd):len(i)]
#print({i_})
zf.write(i,i_)
zf.close()
print('===========')
if __name__ =='__main__':
cwd_zipping()
Python - 双击压缩备份当前文件夹(含过滤器)
最新推荐文章于 2024-04-02 07:46:05 发布
本文介绍如何利用Python脚本实现双击执行,自动压缩并备份当前文件夹内容,同时支持设置过滤条件,排除特定文件或文件夹。
摘要由CSDN通过智能技术生成