как пренебречь чувствительностью к регистру в os.rename заменить - PullRequest
2 голосов
/ 21 октября 2019

У меня есть сценарий, который заменяет имена файлов новым именем файла, которое я указываю, однако сейчас оно чувствительно к регистру (если имя файла = DM, но я ввожу Dm, оно не заменяется)

Я уже пробовал filename.lower () в os.rename, но, похоже, он не работает. Там нет ошибок, хотя, это имя файла остается неизменным, хотя.

import os

old = 'dm'
new = 'datamining'

path = os.getcwd()

filenames = os.listdir(path)
for filename in filenames:
    os.rename ( path+'\\'+ filename.lower() , path+'\\'+ filename.replace(old , new) )

1 Ответ

2 голосов
/ 21 октября 2019

Ваши настоящие имена файлов не обязательно должны быть строчными, но вы передаете методу replace строчную строку 'dm'. Он не может найти строчную букву 'dm' в имени файла и, следовательно, возвращает то же имя файла, в результате чего os.rename ничего не делает.

Имя файла можно записать в нижнем регистре до вызова метода replace:

os.rename( path+'\\'+ filename , path+'\\'+ filename.lower().replace(old , new) )

Однако это приведет к тому, что имя нового файла будет полностью в нижнем регистре. Если вы хотите сохранить регистр остальных имен файлов, вместо него можно использовать re.sub с флагом IGNORECASE:

import re

...

os.rename( path+'\\'+ filename , path+'\\'+ re.sub(old, new, filename, flags=re.IGNORECASE))
...