Python:如何将文件名更改为小写而不是扩展名

Python: How to change a filename to lowercase but NOT the extension

我正在尝试将 WINDOW.txt 等文件名更改为小写,但随后我还需要将扩展​​名 .txt 更改为大写。我在想我可以将整个内容更改为小写,因为扩展名已经是小写,然后使用 .endswith() 之类的东西将扩展名更改为大写,但我似乎无法弄清楚。我知道这对大多数人来说可能看起来很简单,所以感谢您的耐心等待。

oldname='HeLlO.world.TxT'
if '.' in oldname:
  (basename, ext) = oldname.rsplit('.', 1)
  newname = basename.lower() + '.' + ext.upper()
else:
  newname = oldname.lower()
print(f'{oldname} => {newname}')

...正确发出:

HeLlO.world.TxT => hello.world.TXT

如果我没看错,它需要小写的名称和大写的文件扩展名,这很奇怪,但这是一个简单的解决方案。

filename = "WINDOW.txt"
ext_ind = filename.rindex('.')
filename = filename[0:ext_ind].lower() + '.' + filename[ext_ind+1:len(filename)].upper()
print(filename)
>> window.TXT

这个处理跨不同操作系统的文件名和路径:

import os.path

def lower_base_upper_ext(path):
    """Filename to lowercase, extension to uppercase."""
    path, ext = os.path.splitext(path)
    head, tail = os.path.split(path)
    return head + tail.lower() + ext.upper()

保留可能的目录名不变,只是文件名部分小写,扩展名大写。

filename = "WINDOW.txt"
filename = filename.split('.')
filename = ".".join(filename[0:-1]).lower() + '.' + filename[-1].upper()
print(filename)
>> window.TXT

filename = "foo.bar.maz.txt"
filename = filename.split('.')
filename = ".".join(filename[0:-1]).lower() + '.' + filename[-1].upper()
print(filename)
>> foo.bar.maz.TXT
name = "MyFile.txt"
new_name = name.rsplit(sep= ".", maxsplit=1)
print(new_name[0].lower()+"."+new_name[1].upper())