代码之家  ›  专栏  ›  技术社区  ›  ereOn

如何在python中替换(或删除)文件名的扩展名?

  •  67
  • ereOn  · 技术社区  · 14 年前

    python中是否有一个内置函数可以替换(或删除)文件名的扩展名(如果有)?

    例子:

    print replace_extension('/home/user/somefile.txt', '.jpg')
    

    在我的例子中: /home/user/somefile.txt 将成为 /home/user/somefile.jpg

    我不知道它是否重要,但我需要这个为我正在写的一个scons模块。(所以也许我可以使用一些特定于scons的函数?)

    我想要些东西 清洁的 . 对所有出现的 .txt 很明显,绳子里面不干净。(如果我的文件名是 somefile.txt.txt.txt )

    6 回复  |  直到 6 年前
        1
  •  100
  •   Austin Cory Bart    9 年前

    尝试 os.path.splitext 它应该做你想做的。

    import os
    print os.path.splitext('/home/user/somefile.txt')[0]+'.jpg'
    
        2
  •  39
  •   Steven C. Howell amirhosein majidi    6 年前

    扩展安纳帕纳的答案,如何 去除 扩展名使用 pathlib (python>=3.4):

    >>> from pathlib import Path
    
    >>> filename = Path('/some/path/somefile.txt')
    
    >>> filename_wo_ext = filename.with_suffix('')
    
    >>> filename_replace_ext = filename.with_suffix('.jpg')
    
    >>> print(filename)
    /some/path/somefile.ext    
    
    >>> print(filename_wo_ext)
    /some/path/somefile
    
    >>> print(filename_replace_ext)
    /some/path/somefile.jpg
    
        3
  •  26
  •   Katriel    14 年前

    正如@jethro所说, splitext 是一个很好的方法。但在这种情况下,很容易自己将其拆分,因为扩展 必须是 文件名中最后一个句点之后的部分:

    filename = '/home/user/somefile.txt'
    print( filename.rsplit( ".", 1 )[ 0 ] )
    # '/home/user/somefile'
    

    这个 rsplit 告诉python从字符串右侧开始执行字符串拆分,然后 1 表示最多执行一个拆分(例如 'foo.bar.baz' -gt; [ 'foo.bar', 'baz' ] )自从 撕裂 将始终返回一个非空数组,我们可以安全地索引 0 以获取文件名减去扩展名。

        4
  •  3
  •   user2802945    11 年前

    另一种方法是使用 str.rpartition(sep) 方法。

    例如:

    filename = '/home/user/somefile.txt'
    (prefix, sep, suffix) = filename.rpartition('.')
    
    new_filename = prefix + '.jpg'
    
    print new_filename
    
        5
  •  3
  •   IvanD    8 年前

    我喜欢下面的一行方法 str.rsplit() :

    my_filename.rsplit('.', 1)[0] + '.jpg'
    

    例子:

    >>> my_filename = '/home/user/somefile.txt'
    >>> my_filename.rsplit('.', 1)
    >>> ['/home/user/somefile', 'txt']
    
        6
  •  3
  •   AnaPana    8 年前

    对于python>=3.4:

    from pathlib import Path
    
    filename = '/home/user/somefile.txt'
    
    p = Path(filename)
    new_filename = p.parent.joinpath(p.stem + '.jpg') # PosixPath('/home/user/somefile.jpg')
    new_filename_str = str(new_filename) # '/home/user/somefile.jpg'