Предположим, у меня есть несколько файлов с такими пометками:

  • SUS200_One.txt
  • SUS300_Two.txt
  • SUS400_Three.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()
0
gq1108 29 Авг 2020 в 18:25

2 ответа

Лучший ответ

Вам нужно использовать 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()
0
Aziz Sonawalla 29 Авг 2020 в 15:45

Здравствуйте, чтобы изменить имя файла с помощью регулярного выражения, я бы предложил использовать функцию 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)
1
Marcin 29 Авг 2020 в 15:43