使用正则表达式删除文件名中的字符

问题描述

假设我有一堆这样标记文件

  • SUS200_One.txt
  • SUS300_Two.txt
  • SUS400_Three.txt

我想删除某个目录中每个txt文件的SUSxxx部分。我的正则表达式模式正确,当我在目录上执行循环时,可以在每个文件上找到表达式。但是,我只是不知道如何删除它。例如,我希望每个文件删除SUSXXX,并让每个文件分别带有_One,_Two和_Three。以下是我到目前为止的内容。出于某种原因,我无法弄清楚,尽管可能如此简单。任何帮助将不胜感激。

rootdir = ('C:\\Test')
pattern = re.compile(r'\w{3}\d{3}')

def removeChar():
    for filename in os.listdir(rootdir):
        findpattern = pattern.findall(filename)
    
removeChar()

解决方法

你好使用正则表达式更改文件名,我建议使用 re.sub()函数。参见下面的代码。

rootdir = ('C:\\Test')
pattern = re.compile(r'\w{3}\d{3}')

def removeChar():
    for filename in os.listdir(rootdir):
        new_name = re.sub(pattern=pattern,string=filename,repl='')
        
    
removeChar()

但这只会更改字符串本身,而不会更改文件名。为此,您可能应该使用os.rename()函数

import os

old_file_name = "/home/career_karma/raw_data.csv"
new_file_name = "/home/career_karma/old_data.csv"

os.rename(old_file_name,new_file_name)
,

您需要使用os.rename()。这是完整的代码:

import re
import os

rootdir = 'C:\\Test'
pattern = re.compile(r'\w{3}\d{3}')

def removeChar():
    for filename in os.listdir(rootdir):
        if pattern.match(filename) is not None:  # only rename files that match
          newName = re.sub(pattern,"",filename)
          newPath = os.path.join(rootdir,newName)
          oldPath = os.path.join(rootdir,filename)
          os.rename(oldPath,newPath)
    
removeChar()