概述
有时候需要批量处理文件该应用场景,在此做个笔录,方便后续查阅。此demo有批量处理并且修改各个文件名称
代码
# coding=utf-8
import os
import shutil
# 源文件夹路径
src_folder = r'D:\c_test1'
# 目标文件夹路径
dst_folder = r'D:\c_test2'
flag_var = True
dst_path_temp = ''
def FindFile(src_path):
for each_file_name in os.listdir(src_path):
fulldir = os.path.join(src_path, each_file_name) # 拼接成绝对路径
print(fulldir) # 打印相关后缀的文件路径及名称
if os.path.isfile(fulldir): # 文件,匹配->打印
# with open('D:/c_test1/test.txt', 'r', encoding='utf-8', errors='ignore') as file:
with open(fulldir, 'r', errors='ignore') as file:
# f = file.read()
# print(f) # 读取全部内容
print('各个文件名称:' + each_file_name)
src_fileName = os.path.join(os.path.abspath(src_path), fulldir)
dst_fileName = os.path.join(os.path.abspath(dst_folder), each_file_name + '.txt')
# print(src_fileName)
# print(dst_fileName)
# fs = os.rename(src_fileName, dst_fileName)
# f.close()
shutil.copy(fulldir, dst_fileName)
if os.path.isdir(fulldir): # 目录,递归
FindFile(fulldir)
def copy_dir(src, dst):
if not os.path.exists(src):
return
# 目标文件夹可能不存在,这个时候需要创建
if not os.path.exists(dst):
os.mkdir(dst)
pathes = os.listdir(src)
# print(pathes)
for each_file_name in pathes:
f_path = os.path.join(src, each_file_name)
print('src_path' + f_path)
# 目标路径作替换 src/haha.txt -> dst/haha.txt
dst_path = f_path.replace(src, dst)
print('dst_path' + dst_path)
if os.path.isdir(f_path):
# 目标目录按照源文件夹层级生成 src/heihei -> dst/heihei
if not os.path.exists(dst_path):
os.mkdir(dst_path)
# 递归调用拷贝方法
copy_dir(f_path, dst_path)
else:
with open(f_path, 'rb') as f:
content = f.read()
global flag_var #全局变量
if flag_var:
# 记录原来路径
global dst_path_temp # 全局变量
f_path_temp = f_path
dst_path_temp = dst_path
flag_var = False
# 文件后缀追加.txt文件
dst_fileName = os.path.join(os.path.abspath(dst), each_file_name + '.txt')
f_path = os.path.join(src, dst_fileName)
dst_path = f_path.replace(src, dst)
# 目标替换路径
with open(dst_path, 'wb') as wf:
ret = wf.write(content)
flag_var = True
# 等待写完后,再去还原数据
# if (ret):
# # 还原到原来文件格式 (去掉.txt后缀)
# os.rename(dst_path, dst_path_temp)
def rename_files(folder_path, old_ext, new_ext):
if not os.path.exists(folder_path):
return
pathes = os.listdir(folder_path)
# 获取各个文件夹下的所有文件名
for filename in pathes:
f_path = os.path.join(folder_path, filename)
if os.path.isdir(f_path):
rename_files(f_path, old_ext, new_ext)
else:
if filename.endswith(old_ext):
# 构造新文件名
new_filename = filename.replace(old_ext, new_ext)
# 重命名文件
old_file_path = os.path.join(folder_path, filename)
new_file_path = os.path.join(folder_path, new_filename)
os.rename(old_file_path, new_file_path)
if __name__ == '__main__':
copy_dir(src_folder, dst_folder)
# rename_files(dst_folder, ".txt", "")
运行结果: