如何从Python中的文件名replace(或剥离)扩展?
在Python中是否有一个内置的函数可以代替(或删除)文件名的扩展名(如果有的话)?
例:
print replace_extension('/home/user/somefile.txt', '.jpg')
在我的例子中: /home/user/somefile.txt
将成为/home/user/somefile.jpg
我不知道是否重要,但我需要这个我正在写的SCons模块。 (所以也许有一些SCons的具体function,我可以使用?)
我想要一些干净的东西。 做一个简单的stringreplacestring中的所有.txt
显然是不干净的。 (如果我的文件名是somefile.txt.txt.txt
这将失败)
尝试os.path.splitext它应该做你想做的。
import os print os.path.splitext('/home/user/somefile.txt')[0]+'.jpg'
正如@jethro所说, splitext
是做这件事的好方法。 但是在这种情况下,自己分割它非常容易,因为扩展名必须是在最后一段时间之后的文件名的一部分:
filename = '/home/user/somefile.txt' print( filename.rsplit( ".", 1 )[ 0 ] ) # '/home/user/somefile'
rsplit
告诉Python执行从string右边开始的string拆分,而1
表示最多执行一个拆分(例如'foo.bar.baz'
– > [ 'foo.bar', 'baz' ]
)。 由于rsplit
将总是返回一个非空的数组,我们可以安全地将0
索引到它以获得文件名减去扩展名。
在AnaPana的答案上扩展,如何使用pathlib(Python> = 3.4) 删除扩展:
from pathlib import Path filename = Path('/some/path/somefile.ext') filename_wo_ext = filename.with_suffix('') print(filename) print(filename_wo_ext)
/some/path/somefile.ext
/一些/path/ somefile
另一种方法是使用str.rpartition(sep)
方法。
例如:
filename = '/home/user/somefile.txt' (prefix, sep, suffix) = filename.rpartition('.') new_filename = prefix + '.jpg' print new_filename
我更喜欢使用str.rsplit()的以下单线程方法:
my_filename.rsplit('.', 1)[0] + '.jpg'
例:
>>> my_filename = '/home/user/somefile.txt' >>> my_filename.rsplit('.', 1) >>> ['/home/user/somefile', 'txt']
对于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'