我正在尝试更改文件的扩展名,我有两个选项。
os.path.splitext(os.path.basename(g_filename))[0] + ".new"
os.path.basename(g_filename).split('.')[0] + ".new"
两者都提供相同的输出。所以我从oldfile.new
oldfile.old
的新文件
文件名中不可能有太多'.'
。
这两个哪个更好?什么是拇指规则(如果有的话)?
答案 0 :(得分:4)
当你实施它们时,它们是不同的。使用正确的:
>>> os.path.splitext(os.path.basename('a.b.c'))[0] + '.new'
'a.b.new'
>>> os.path.basename('a.b.c').split('.')[0] + ".new"
'a.new'
更新
可以用split
替换rsplit(..., 1)
来电,结果与splitext
类似:
>>> os.path.basename('a.b.c').rsplit('.', 1)[0] + ".new"
'a.b.new'
但是函数之间的差异仍然存在,因为splitext
将以点开头的文件名视为没有扩展名,很可能因为那些对于基于unix的os而言是特殊的:
>>> os.path.splitext(os.path.basename('.a'))[0] + '.new'
'.a.new'
>>> os.path.basename('.a').rsplit('.', 1)[0] + '.new'
'.new'
答案 1 :(得分:2)
第一个是两者中较好的一个。
如果文件名中包含两个或更多句点,第二个会被绊倒。