有一批文件,第一级文件夹名是Serial number, 第二级是测试时间,第三级中有两个csv 文件,这个文件的前面与Serial number 文件夹名一致,后面是固定的_blemish_results_RGB_merged_offlineprocess.csv 和_blemish_results_W_merged_offlineprocess.csv。 如何更改以下代码实现固定字符串的搜索并重命名该文件,重命名方式我已写好,但是不知道怎么写模糊查找,谢谢各位,有效立即采纳
要实现的目标是将图片中红色的csv 文件,重命名成 “一级文件夹名”+“二级文件夹名前17位”+“固定_blemish_results_RGB_merged_offlineprocess.csv”,然后统一放在target folder 下面,请各位赐教
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Dec 18 11:16:42 2022
@author: andychen
"""
import os
import shutil
# 设置要遍历的根文件夹路径
root_path = '/Users/andychen/Desktop/untitled folder/'
# 设置要将重命名后的文件放到的路径
target_path = '/Users/andychen/Desktop/untitled folder/'
# 创建 target_path 文件夹,如果文件夹已存在则不会创建
os.makedirs(target_path, exist_ok=True)
# 遍历所有文件夹和子文件夹
for root, dirs, files in os.walk(root_path):
# 遍历所有文件
for file in files:
# 如果文件名是 ******blemish_results_RGB_merged_offlineprocess.csv
if file == 'blemish_results_RGB_merged_offlineprocess.csv':
# 获取文件所在的一级文件夹名和二级文件夹名的前 17 个字符
folder1 = root.split('/')[-2]
folder2 = root.split('/')[-1][:17]
# 重命名文件
new_file_name = folder1 + '_' + folder2 + '_blemish_results_RGB_merged_offlineprocess.csv'
# 获取文件的完整路径
file_path = os.path.join(root, file)
# 获取重命名后文件的完整路径
new_file_path = os.path.join(target_path, new_file_name)
# 重命名文件并移动到指定路径
shutil.copy(file_path, new_file_path)
print("finish")
可以使用Python中的字符串操作函数来实现模糊查找,比如使用字符串的startswith()函数判断是否以指定字符串开头,或者使用字符串的find()函数查找指定字符串是否在字符串中出现。
修改代码如下:
import os
import shutil
# 设置要遍历的根文件夹路径
root_path = '/Users/andychen/Desktop/untitled folder/'
# 设置要将重命名后的文件放到的路径
target_path = '/Users/andychen/Desktop/untitled folder/'
# 创建 target_path 文件夹,如果文件夹已存在则不会创建
os.makedirs(target_path, exist_ok=True)
# 遍历所有文件夹和子文件夹
for root, dirs, files in os.walk(root_path):
# 遍历所有文件
for file in files:
# 如果文件名是以_blemish_results_RGB_merged_offlineprocess.csv结尾
if file.endswith('_blemish_results_RGB_merged_offlineprocess.csv'):
# 获取文件所在的一级文件夹名和二级文件夹名的前 17 个字符
folder1 = root.split('/')[-2]
folder2 = root.split('/')[-1][:17]
# 重命名文件
new_file_name = folder1 + '_' + folder2 + '_blemish_results_RGB_merged_offlineprocess.csv'
# 获取文件的完整路径
file_path = os.path.join(root, file)
# 获取重命名后文件的完整路径
new_file_path = os.path.join(target_path, new_file_name)
# 重命名文件并移动到指定路径
shutil.copy(file_path, new_file_path)
print("finish")
这样修改后,代码可以检查文件名是否以"_blemish_results_RGB_merged_offlineprocess.csv"结尾,如果是,则进行重命名操作。
可以使用字符串的 endswith()
方法来判断文件名是否以特定字符串结尾,然后再使用字符串的 split()
方法来获取文件所在的一级文件夹名和二级文件夹名的前 17 个字符。代码如下:
import os
import shutil
# 设置要遍历的根文件夹路径
root_path = '/Users/andychen/Desktop/untitled folder/'
# 设置要将重命名后的文件放到的路径
target_path = '/Users/andychen/Desktop/untitled folder/'
# 创建 target_path 文件夹,如果文件夹已存在则不会创建
os.makedirs(target_path, exist_ok=True)
# 遍历所有文件夹和子文件夹
for root, dirs, files in os.walk(root_path):
# 遍历所有文件
for file in files:
# 如果文件名以 _blemish_results_RGB_merged_offlineprocess.csv 结尾
if file.endswith('_blemish_results_RGB_merged_offlineprocess.csv'):
# 获取文件所在的一级文件夹名和二级文件夹名的前 17 个字符
folder1 = root.split('/')[-2]
folder2 = root.split('/')[-1][:17]
# 重命名文件
new_file_name = folder1 + '_' + folder2 + '_blemish_results_RGB_merged_offlineprocess.csv'
# 获取文件的完整路径
file_path = os.path.join(root, file)
# 获取重命名后文件的完整路径
new_file_path = os.path.join(target_path, new_file_name)
# 重命名文件并移动到指定路径
shutil.copy(file_path, new_file_path)
print("finish")
这段代码会遍历根文件夹下所有的文件和子文件夹,找到以 _blemish_results_RGB_merged_offlineprocess.csv
结尾的文件,并将其重命名为 Serial number_test time_blemish_results_RGB_merged_offlineprocess.csv
的格式,然后移动到指定的目录下。
不知道你的模糊查找指的是查找文件名还是文件后缀还是文件夹。glob这个库有模糊查找的功能
dirname = r'C:\Users\Administrator\Desktop\untitled folder'
import os , shutil
for r,m,c in os.walk(dirname):
if c:
target_path = r + '\\target folder'
if os.path.exists(target_path):
shutil.rmtree(target_path)
os.mkdir(target_path)
pppath = r.split('\\')[-2]
ppath = r.split('\\')[-1][:17]
for csvfile in c:
if csvfile.endswith('csv'):
shutil.copy(r + '\\' + csvfile,target_path +'\\' + csvfile.replace(pppath, pppath +'_' + ppath))
请参考如下实例思路:https://www.cnblogs.com/technicist/p/15166618.html
不知道你这个问题是否已经解决, 如果还没有解决的话: