Python 做批量处理的问题

一些列不同文件夹

img

在每个文件夹的三级子文件夹中都有同名csv 文件,Defect_CMreport.csv

img

我需要遍历所有文件夹,实现以下功能

  1. 将Defect_CMreport.csv 重命名为“一级文件夹名+二级文件夹前17个字符+Defect_CMreport.csv”
    例如“LE2B029-080104_20221217_13-02-54_Defect_CMreport.csv”

  2. 将所有重命名过的文件统一放在指定的path 下

试一下下面的代码实现,里面的路径部分你可以根据实际情况配置一下,有问题可以随时反馈,望采纳

import os

# 设置要遍历的根文件夹路径
root_path = '/path/to/root/folder'

# 设置要将重命名后的文件放到的路径
target_path = '/path/to/target/folder'

# 创建 target_path 文件夹,如果文件夹已存在则不会创建
os.makedirs(target_path, exist_ok=True)

# 遍历所有文件夹和子文件夹
for root, dirs, files in os.walk(root_path):
    # 遍历所有文件
    for file in files:
        # 如果文件名是 Defect_CMreport.csv
        if file == 'Defect_CMreport.csv':
            # 获取文件所在的一级文件夹名和二级文件夹名的前 17 个字符
            folder1 = root.split('/')[-2]
            folder2 = root.split('/')[-1][:17]
            # 重命名文件
            new_file_name = folder1 + '_' + folder2 + '_Defect_CMreport.csv'
            # 获取文件的完整路径
            file_path = os.path.join(root, file)
            # 获取重命名后文件的完整路径
            new_file_path = os.path.join(target_path, new_file_name)
            # 重命名文件并移动到指定路径
            os.rename(file_path, new_file_path)

import os
root = "D:\\"
aim_path=''
for dirpath, dirnames, filenames in os.walk(root):
    for filepath in filenames:
        temp=os.path.join(dirpath, filepath)
        if temp.endswith('Defect_CMreport.csv'):
            a=temp.split('\\')
            os.rename(temp,aim_path+'\\'+a[0]+'_'a[1][:17]+'_'+'Defect_CMreport.csv')
import os
import shutil

# 要遍历的文件夹路径
root_dir = "/path/to/root"

# 目标文件夹路径
target_dir = "/path/to/target"

# 遍历文件夹中的所有文件和子文件夹
for root, dirs, files in os.walk(root_dir):
    # 对于每个文件
    for file in files:
        # 如果文件名是 "Defect_CMreport.csv"
        if file == "Defect_CMreport.csv":
            # 获取文件的完整路径
            file_path = os.path.join(root, file)
            # 获取一级文件夹名称
            first_level_dir_name = os.path.basename(os.path.dirname(root))
            # 获取二级文件夹名称的前 17 个字符
            second_level_dir_name = os.path.basename(root)[:17]
            # 生成新的文件名
            new_file_name = f"{first_level_dir_name}_{second_level_dir_name}_Defect_CMreport.csv"
            # 生成新的文件路径
            new_file_path = os.path.join(target_dir, new_file_name)
            # 移动文件到目标文件夹并重命名
            shutil.move(file_path, new_file_path)

这也可以

Sub doc2docx()    'doc文件转docx文件
     
    Dim myDialog As FileDialog
    Set myDialog = Application.FileDialog(msoFileDialogFilePicker)
    Dim oFile As Object
    Dim oFilePath As Variant
     
    With myDialog
        .Filters.Clear    '清除所有文件筛选器中的项目
        .Filters.Add "所有 WORD2007 文件", "*.doc", 1    '增加筛选器的项目为所有doc文件
        .AllowMultiSelect = True    '允许多项选择
        If .Show = -1 Then    '确定
            For Each oFilePath In .SelectedItems    '在所有选取项目中循环
                Set oFile = Documents.Open(oFilePath)
                oFile.SaveAs FileName:=Replace(oFilePath, "doc", "docx"), FileFormat:=16
                oFile.Close
            Next
    End If
     
End With
 
End Sub