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

Python:如何将文件名更改为小写而不是扩展名,python,uppercase,Python,Uppercase,我正在尝试将WINDOW.txt之类的文件名改为小写,但我还需要将扩展名.txt改为大写。我想我可以把整个东西改成小写,因为扩展名已经是小写的了,然后用.endswith()之类的东西把扩展名改成大写,但我似乎不明白。我知道这对大多数人来说可能很简单,所以谢谢你的耐心 oldname='HeLlO.world.TxT' if '.' in oldname: (basename, ext) = oldname.rsplit('.', 1) newname = basename.lower(

我正在尝试将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
…正确地发射:

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

如果我读对了问题,它需要小写名称和大写文件扩展名,这很奇怪,但这里有一个简单的解决方案

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

这一个可以处理不同操作系统中的文件名和路径:

导入操作系统路径
def下部底部上部外部(路径):
“”“文件名改为小写,扩展名改为大写。”“”
path,ext=os.path.splitext(path)
head,tail=os.path.split(路径)
返回头部+尾部。下部()+外部上部()

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

这一部分处理不同操作系统的文件名和路径:

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
导入操作系统路径
def下部底部上部外部(路径):
“”“文件名改为小写,扩展名改为大写。”“”
path,ext=os.path.splitext(path)
head,tail=os.path.split(路径)
返回头部+尾部。下部()+外部上部()


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

将它们一分为二,
.lowercase()
前半部分,重新组合
rsplit()
是你的朋友。我的意思是如果它总是三个字母的扩展名。为什么不把整件事小写,然后把最后3个字母大写呢?如果您必须处理3个以上的扩展名字母,则需要查找名称中的最后一个
。@Rashid'Lee'Ibrahim,您不知道它是3个字母
xlsx
是4,
gz
是2。优于
(r)split
是@CharlesDuffy yea这就是为什么我明确提到如果你绝对知道vs如果你不知道。例如,如果您知道您一直只处理txt文件,或者您必须适应多种类型。将它们分成两部分,
.lowercase()
前半部分,重新组合
rsplit()
是你的朋友。我的意思是如果它总是三个字母的扩展名。为什么不把整件事小写,然后把最后3个字母大写呢?如果您必须处理3个以上的扩展名字母,则需要查找名称中的最后一个
。@Rashid'Lee'Ibrahim,您不知道它是3个字母
xlsx
是4,
gz
是2。优于
(r)split
是@CharlesDuffy yea这就是为什么我明确提到如果你绝对知道vs如果你不知道。例如,如果您知道您一直只处理txt文件,或者您必须适应多种类型。这对
foo.bar.baz
foo
@CharlesDuffy都不正确。感谢您指出它,对它进行了更改以处理这种情况。@ojdo感谢您指出它。我得到
window.txt
,您是否忘记了对扩展名的
upper()
调用?这对
foo.bar.baz
foo
@CharlesDuffy都不正确,谢谢您指出它,对它进行了更改以处理这种情况。@ojdo谢谢您指出它。我得到
window.txt
,您忘记了
upper()
调用扩展名?我没有意识到
splitext()
在ext部分保留了扩展名字符;这使得这项工作很好(如中所示),非常感谢。这正是我想要的。我感谢大家的帮助!我强迫性地寻找一个适合所有事情的方法。我的枕头下总是放着
itertools
collections
os
。我没有意识到
splitext()
在ext部分保留了扩展字符;这使得这项工作很好(如中所示),非常感谢。这正是我想要的。我感谢大家的帮助!我强迫性地寻找一个适合所有事情的方法。我的枕头下总是放着
itertools
collections
os
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