【问题标题】:How to remove dots from a filename without removing them from the extension?如何从文件名中删除点而不从扩展名中删除它们?
【发布时间】:2020-08-20 23:33:30
【问题描述】:

我正在遍历一个包含不同扩展名的文件的文件夹。我想从文件名中删除点 ('.'),但不是扩展名。如果我只是这样做:

def filename_replacer(file_name):
    extension = file_name[-4:]
    raw_name = file_name[:-4]       
    new_name = raw_name.replace(".", "_")
    new_name = new_name + extension
    return new_name

file = "Remove.TheDotReport.xlsx"
cleaned_file = filename_replacer(file)

结果不正确(例如:Remove_TheDotReport_xlxs)。如何在不弄乱扩展名的情况下始终删除文件中的点?

【问题讨论】:

  • 最简单的答案...将扩展名的切片增加到[-5:],这将涵盖4个字符+点的扩展名。在非常奇怪的极端情况下可能会失败,其中您有 3 个字母的扩展名并且文件名以点结尾,如果这甚至是合法的。我确信正则表达式专业人士会有其他选择......

标签: python python-3.x path


【解决方案1】:

首先使用os.path.splitext 获取扩展。

import os

def filename_replacer(filename):
  fname, fext = os.path.splitext(filename)
  return fname.replace(".", "_") + fext

【讨论】:

    【解决方案2】:

    从 Python 3.4 开始,使用路径的一种便捷方式是 pathlib 内置库。它将路径视为 objects 而不是简单的 strings

    从 Python 3.9 开始,添加了一个新方法 - with_stem - 它只更改文件名而不更改扩展名。所以这很容易做到:

    from pathlib import Path
    
    path = Path("Remove.TheDotReport.xlsx")
    print(path.with_stem(path.stem.replace('.', '_')))
    # Remove_TheDotReport.xlsx
    

    对于旧版本,您仍然可以使用with_name 方法,但需要做更多工作(单独添加扩展):

    from pathlib import Path
    
    path = Path("Remove.TheDotReport.xlsx")
    print(path.with_name(path.stem.replace('.', '_') + path.suffix))
    # Remove_TheDotReport.xlsx
    

    【讨论】:

      猜你喜欢
      • 2012-06-29
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      相关资源
      最近更新 更多