问题描述
- 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()