批量对文件名进行重新命名,过程包括识别原来的文件名,确认重新命名的规则。
通过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)
参考