Python 批处理文件

img

有一批文件,第一级文件夹名是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"结尾,如果是,则进行重命名操作。

以下内容部分参考ChatGPT模型:


可以使用字符串的 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

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^