我正在尝试从文件名中删除数字。但是这样做也会删除扩展名,并且mp4
文件变成mp
。有什么好的解决方案可以解决这个问题?
import os
def file_rename():
name_list=os.listdir(r"C:\Users\caspe\OneDrive\Documents\Övrigt\Kodning\Twitch")
print(name_list)
saved_path=os.getcwd()
print("Current working directory is"+saved_path)
os.chdir(r"C:\Users\caspe\OneDrive\Documents\Övrigt\Kodning\Twitch")
for file_name in name_list:
print("old name"+file_name)
print("new name"+file_name.strip("0123456789"))
os.rename(file_name, file_name.translate(str.maketrans('','','0123456789-')))
os.chdir(saved_path)
file_rename()
答案 0 :(得分:3)
您可以使用pathlib.Path对象。它具有name
和suffix
属性,以及一个rename方法:
import re
from pathlib import Path
for file in Path(r'C:\tmp').glob('*'):
if not file.is_file():
continue
new_name = re.sub('\d','', file.stem) + file.suffix
file.rename(file.parent/new_name)
parent
属性提供文件所属的文件夹,而is_file
方法用于检查我们是否正在处理常规文件(而不是文件夹)。通过/
运算符可以轻松创建新Path对象(完整的新文件路径为file.parent / new_name
)。
re.sub()
用于替换旧文件名\d
部分中的数字(stem
表示数字)。
答案 1 :(得分:0)
您可以使用re
,例如
import re, os, glob
for f in glob.glob(os.path.join(yourdir,'*')):
old_name=os.path.basename(f)
old_split = old_name.split('.')
ext = old_split[-1]
new_name=re.sub('\d','',''.join(old_split[:-1])) + '.' + ext
new_f=os.path.join(os.path.dirname(f),new_name)
os.rename(f, new_f)
在这里,您首先提取基本名称,然后将其拆分以获取扩展名。接下来,通过用空字符串替换旧基础名称中的所有数字来构建新基础名称,然后添加扩展名。
然后您构建完整路径并重命名文件。
答案 2 :(得分:0)
类似
remove = set("0123456789-")
fname = 'my_file1-new12.mp4'
parts = fname.split('.')
parts[0] = ''.join(x for x in parts[0] if x not in remove)
clean_fname = parts[0] + '.' + parts[1]
print(clean_fname)
输出
my_filenew.mp4
答案 3 :(得分:-1)
此简单正则表达式将在您的for循环中解决您的问题。首先将文件名放在第一个点之前,然后将其分组。然后,您可以从文件名中删除所有必需的数字以进行重命名。
find = re.compile(r"^[^.]*")
for file_name in name_list:
print (re.search(find, file_name).group(0))
new_name = re.search(find, file_name).group(0)
print("new name are"+ new_name.strip("0123456789"))