【问题标题】:Python: How to change a filename to lowercase but NOT the extensionPython:如何将文件名更改为小写而不是扩展名
【发布时间】:2021-07-17 20:22:51
【问题描述】:

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

【问题讨论】:

  • 一分为二,.lowercase()前半部分,重新​​组合。 rsplit() 是你的朋友。
  • 我的意思是如果它总是一个 3 个字母的扩展名。为什么不将整个内容小写,然后将最后 3 个字母大写?如果您必须处理大于 3 个字母的扩展名,则需要在名称中查找最后一个 .
  • @Rashid'Lee'Ibrahim,你不知道它是 3 个字母。 xlsx 是 4,gz 是 2。
  • (r)split更好的是os.path.splitext
  • @CharlesDuffy 是的,这就是为什么我明确提到如果你绝对知道与如果你不知道。就像您知道自己始终只处理 txt 文件或者您必须容纳多种类型一样。

标签: python uppercase


【解决方案1】:
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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这不适用于foo.bar.baz,也不适用于foo
    • @CharlesDuffy 感谢您指出这一点,并对其进行了更改以处理这种情况。
    • 我收到了window.txt,您是否忘记了分机上的upper() 呼叫?
    【解决方案3】:

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

    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()
    

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

    【讨论】:

    • 我没有意识到splitext() 在 ext 部分保留了扩展字符;这使得这项工作很好(如ideone.com/QbqShM所示)
    • 非常感谢。这正是我一直在寻找的。感谢大家的帮助!
    • 我强迫性地为一切寻找合适的standard libraryitertoolscollectionsos 总是在我的枕头下。
    【解决方案4】:
    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
    

    【讨论】:

      【解决方案5】:
      name = "MyFile.txt"
      new_name = name.rsplit(sep= ".", maxsplit=1)
      print(new_name[0].lower()+"."+new_name[1].upper())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-08
        • 2016-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多