Python和R语言批量重命名文件

批量对文件名进行重新命名,过程包括识别原来的文件名,确认重新命名的规则。
通过Python和R语言分别实现对文件名的批量操作。
通过具体的需求,加强对语言的掌握
涉及: 目录和文件的处理,字符串的正则处理

Python代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#! /usr/bin
# -*- coding: utf-8 -*-

import os
from os import listdir
from re import sub
from shutil import copy

# 存储文件全路径以及文件名 get_all_file 中使用
all_path = []
all_name = []


def get_all_file(file_dir):
    """ 获取多层目录下所有文件 """
    file_list = listdir(file_dir)
    for file_name in file_list:
        file_path = os.path.join(file_dir, file_name)
        # 判断是否是文件夹,如果是文件夹则递归调用函数
        if os.path.isdir(file_path):
            get_all_file(file_path)
        # 如果是文件,保存到列表中
        elif os.path.isfile(file_path):
            all_path.append(file_path)
            all_name.append(file_name)
    return all_name, all_path


def get_local_file(file_dir):
    """ 获取本层目录下所有文件-不包含文件夹  输入是文件路 String,返回值是列表"""
    # 存储文件全路径以及文件名
    local_path = []
    local_name = []
    file_list = listdir(file_dir)
    for file_name in file_list:
        file_path = os.path.join(file_dir, file_name)
        # 如果是文件,保存文件路径及文件名到列表中
        if os.path.isfile(file_path):
            local_path.append(file_path)
            local_name.append(file_name)
    return local_path, local_name


def rename_local_file(original_file, original_name):
    pattern = '\\.txt'
    # re模块提供了re.sub用于替换字符串中的匹配项
    file_replace_name = sub(pattern, "", original_name)
    # 构建新的文件名
    sql_file_name = '特征学习_' + file_replace_name+'.sql'
    # 将路径与文件名分开 ,并取路径名
    base_dir = os.path.split(original_file)[0]
    # 构建文件路径
    result_file_path = os.path.join(base_dir, sql_file_name)
    print(result_file_path)
    # 重新命名
    os.rename(original_file, result_file_path)


def copy_rename_local_file(original_file, original_name, des_dir):
    pattern = '\\.sql'
    # re模块提供了re.sub用于替换字符串中的匹配项
    file_replace_name = sub(pattern, "", original_name)
    # 构建新的文件名
    sql_file_name = '特征学习_' + file_replace_name+'.sql'

    # 构建文件路径
    result_file_mid_path = os.path.join(des_dir, 'new')
    if os.path.exists(result_file_mid_path):
        print(result_file_mid_path + '目录已存在')
    else:
        print(result_file_mid_path + '目录不存在,创建目录')
        # os.mkdir(result_file_mid_path) 只能创建一级目录
        os.makedirs(result_file_mid_path)
        print(result_file_mid_path)
    # 重新命名
    result_file_path = os.path.join(result_file_mid_path, sql_file_name)
    print(result_file_path)
    copy(original_file, result_file_path)


if __name__ == "__main__":
    filedir = 'C:\\Users\\my\\Desktop\\任务'
    # 输入文件的名称
    dest_dir = 'C:\\Users\\my\\Desktop\\SQL'
    files, names = get_local_file(filedir)
    for file, name, in zip(files, names):
        copy_rename_local_file(file, name, dest_dir)

R语言代码

folder <- "C:\\Users\\my\\Desktop\\task"
files <- list.files(folder)
for(f in files){
  # 去掉txt之后的文件名
  matchname <- sub('\\.txt','',f)
  # 重新命名的后缀
  newname <- paste0(matchname,"_1.sql",sep='')
  print( paste0(folder,'/',f))
  print(paste0(folder,'/',newname))
  # 重命名
  file.rename(paste0(folder,'/',f),paste0(folder,'/',newname))
}
 list.files(folder)

参考

blogroll

social