文件名批量操作
- 批量去除文件名中特殊字符
以去除’signal_1.jpg’中的’_'为例,所用函数re.sub
sub 函数使用规则
re.sub(‘要操作的原字符’, ‘目标字符’,‘操作字符串’)
例如:
name = signal_1.jpg
newname=re.sub('\D','',name)#\D表示非数字
print(newname)
>>>l1
- 文件批量重命名
以signal1.jpg替换signal_1.jpg为例,所用函数os.renames
renames函数使用规则
os.renames(‘path+old name’, ‘path+new name’)
例如:
path = r'E:\dataset\find_peak'
os.renames(os.path.join(path,name),os.path.join(path,newname+str('.jpg')))
- 删除不同后缀的文件
以Thumbs.db文件为例,所用函数os.remove
remove函数使用规则
os.remove(‘目标文件的绝对路径’)
if os.path.splitext(name)[1] == '.db':
os.remove(os.path.join(Filepath,name))
-
文件排序
os.listdir()读取到的文件不是顺序的,要将其按从小到大依次排列好,所用函数sort()
sort()函数使用规则
[1]file_names.sort()
直接对file_names中的元素进行排序
[ 2]file_names.sort(key=lambda x:int(x.split('.')[0][8:]))
标示以’.‘为标志分割文件名,取’.'之前部分的第8位向后的 内容,转化为int型,对其进行排序 -
整体实现
目标:实现对一个文件夹的子文件夹中的所有图片进行重命名及排序,图片已经是按顺序排好,但删除了部分图片,故需要将其序号重新向前看齐
代码实现:
tips:每次对文件名进行操作后,要想用print查看file_names的内容,必须重新调用一次file_names = os.listdir(Filepath)),更新file_names的内容
import os, re
path = r'E:\fish\per\set\signal'
file_path = os.listdir(path)
for file in file_path:
print(file)
Filepath=os.path.join(path,file)
file_names = os.listdir(Filepath)
print(file_names)
for name in file_names:
if os.path.splitext(name)[1] == '.db':
os.remove(os.path.join(Filepath,name))
newname=re.sub('\D','',name)
os.renames(os.path.join(Filepath,name),os.path.join(Filepath,newname+str('.jpg')))
file_names = os.listdir(Filepath)
print(file_names)
file_names.sort(key=lambda x:int(x.split('.')[0]))
print(file_names)
startNumber = '1'
count=0
for name in file_names:
(fileName, extension) = os.path.splitext(name)
os.renames(os.path.join(Filepath, name), os.path.join(Filepath, file+str(count+int(startNumber))+extension))
count +=1
file_names = os.listdir(Filepath)
print(file_names)
2020/12/3