代码是对文件、文件夹操作进行了简单封装,以满足相应的应用场景
1. 文件复制
包含对类型的判断,子文件夹等
2. 修改文件名
3. 修改文件后缀
import os
import time
import shutil
def copyfiles_create_subfolder(sourceDir, targetDir, type='None'):
"""
完全连子目录也会复制好,美观
:param sourceDir: 源文件夹
:param targetDir: 目标文件夹
:param type: 判断复制哪个类型的文件
:return:
"""
for filename in os.listdir(sourceDir):
sourceF = os.path.join(sourceDir, filename)
targetF = os.path.join(targetDir, filename)
if os.path.isfile(sourceF):
if not os.path.exists(targetDir):
os.makedirs(targetDir)
if not os.path.exists(targetF) or (
os.path.exists(targetF) and (os.path.getsize(targetF) != os.path.getsize(sourceF))):
if type != 'None':
if type == os.path.splitext(filename)[1]:
open(targetF, "wb").write(open(sourceF, "rb").read())
print("%s %s 复制完毕" % (time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())), targetF))
else:
open(targetF, "wb").write(open(sourceF, "rb").read())
print("%s %s 复制完毕" % (time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())), targetF))
else:
print("%s %s 已存在,不重复复制" % (time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())), targetF))
if os.path.isdir(sourceF):
copyfiles_create_subfolder(sourceF, targetF, type=type)
def copyfiles_nocreate_subfolder(sourceDir,targetDir,type='None'):
"""
将文件夹下(含子文件夹)所有特定类型的文件复制到1个文件夹中,
这样子文件夹下不能有名字一样的文件,否则后面的文件会替换掉前面的文件
:param sourceDir: 源文件夹
:param targetDir: 目标文件夹
:param type: 想要复制的文件类型
:return:
"""
for root, dir1, filenames in os.walk(sourceDir):
for filename in filenames:
old_path = os.path.join(root, filename)
new_path = os.path.join(targetDir, filename)
if type != 'None':
if type == os.path.splitext(filename)[1]:
shutil.copyfile(old_path, new_path)
else:
shutil.copyfile(old_path, new_path)
def change_file_extension(sourceDir,sourcetype,targetype):
"""
改变文件的后缀
:param sourceDir: 源文件夹
:param sourcetype: 需要修改的类型
:param targetype: 修改后的类型
:return:
"""
for root, dir1, filenames in os.walk(sourceDir):
for filename in filenames:
file = os.path.splitext(filename)[0]
print(filename)
extension = os.path.splitext(filename)[1]
print(extension)
if extension == sourcetype:
old_name = os.path.join(root, file + sourcetype)
new_name = os.path.join(root, file + targetype)
os.rename(old_name, new_name)
def change_file_name(sourceDir):
"""
改变文件的后缀
:param sourceDir: 源文件夹
:param sourcetype: 需要修改的类型
:param targetype: 修改后的类型
:return:
"""
for root, dir, filenames in os.walk(sourceDir):
num = 0
for filename in filenames:
extension = os.path.splitext(filename)[1]
old_name = os.path.join(root, filename)
file = root.split('\\')[-1] + '_' + str(num) + extension
new_name = os.path.join(root, file)
os.rename(old_name, new_name)
if extension == '.xml':
num += 1
def copyfiles_same_name(sourceDir,targetDir,saveDir):
"""
筛选出同源文件夹内文件名字一样的文件(不含有后缀)
:param sourceDir: 源文件夹
:param targetDir: 目标文件夹
:param saveDir: 保存路径
:return:
"""
for root, dir1, filenames in os.walk(sourceDir):
for filename in filenames:
targetDir_path = os.path.join(targetDir, os.path.splitext(filename)[0] + '.png')
saveDir_path = os.path.join(saveDir, os.path.splitext(filename)[0] + '.png')
try:
shutil.copyfile(targetDir_path, saveDir_path)
except:
print(filename + '不存在!')
if __name__ == "__main__":
sourceDir = r"D:\360MoveData\Users\Administrator\Desktop\客户要求-原图 - 副本\qingtouqianya"
targetDir = r"D:\360MoveData\Users\Administrator\Desktop\新建文件夹 (2)"
try:
import psyco
psyco.profile()
except ImportError:
pass
change_file_name(sourceDir)