2010-05-24 167 views

回答

24

os.path.splitext()os.rename()

例如:

# renamee is the file getting renamed, pre is the part of file name before extension and ext is current extension 
pre, ext = os.path.splitext(renamee) 
os.rename(renamee, pre + new_extension) 
+0

你能更具体,我看到的文档之前也没有工作。 – MysticCodes 2010-05-24 21:17:58

+0

使用第一个函数来获得基数。将它与新扩展相结合,并将旧文件名和新文件名传递给第二个函数。 – 2010-05-24 21:20:28

+6

更正:'os.rename(root,root + new_extension)'应该读取'os.rename(renamee,root + new_extension)' – mloskot 2014-05-20 10:16:50

44
import os 
thisFile = "mysequence.fasta" 
base = os.path.splitext(thisFile)[0] 
os.rename(thisFile, base + ".aln") 

哪里thisFile =您正在改变

+5

我更喜欢这个答案,因为它提供了一个例子,而不仅仅是引用完成任务所需的方法。谢谢@FryDay – sadmicrowave 2013-08-30 03:45:46

11

使用此文件的绝对路径:

os.path.splitext("name.fasta")[0]+".aln" 

这里是多么上述工程:

的splitext方法从扩展创建一个元组分隔名称:

os.path.splitext("name.fasta") 

创建的元组现在包含字符串“名”和“FASTA”。 然后你只需要访问字符串“名”,这是元组的第一个元素:

os.path.splitext("name.fasta")[0] 

然后你想要一个新的扩展添加到该名称:

os.path.splitext("name.fasta")[0]+".aln" 
8

起价Python 3.4里面有pathlib内置库。因此,代码可能是这样的:

from pathlib import Path 

filename = "mysequence.fasta" 
new_filename = Path(filename).stem + ".aln" 

https://docs.python.org/3.4/library/pathlib.html#pathlib.PurePath.stem

我爱pathlib :)

+0

这是一个非常酷的lib!谢谢! – 2017-04-24 01:06:16

+0

这对于python 3.6字符串插值语法来说更好(https://www.python.org/dev/peps/pep-0498/) 'new_filename = f“{Path(filename).stem} .aln”' – 2018-02-03 07:11:42

+0

小心 - 如果有人存在,茎也会剥离路径。如果你想重命名文件,并且提供了一个路径(当然这不是问题),这种技术会失败。 – 2018-02-11 15:49:11

4

使用pathlib.Path一种优雅的方式:

from pathlib import Path 
p = Path('mysequence.fasta') 
p.rename(p.with_suffix('.aln')) 
+0

虽然OP没有要求执行重命名,但它是在标签中,并且如果要执行重命名,并且如果可能输入可能有路径而不仅仅是文件名,则此技术是正确的一。 – 2018-02-11 15:51:08