假设从index.py
使用CGI,我有文件foo.fasta
来显示文件。我想在显示文件中将foo.fasta
的文件扩展名更改为foo.aln
。我该怎么办?
答案 0 :(得分:57)
import os
thisFile = "mysequence.fasta"
base = os.path.splitext(thisFile)[0]
os.rename(thisFile, base + ".aln")
其中thisFile =您要更改的文件的绝对路径
答案 1 :(得分:35)
使用pathlib.Path的优雅方式:
from pathlib import Path
p = Path('mysequence.fasta')
p.rename(p.with_suffix('.aln'))
答案 2 :(得分:31)
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)
答案 3 :(得分:18)
从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:)
答案 4 :(得分:13)
使用此:
os.path.splitext("name.fasta")[0]+".aln"
以上是如何运作的:
splitext方法将名称与创建元组的扩展名分开:
os.path.splitext("name.fasta")
创建的元组现在包含字符串" name"和" fasta"。 然后你只需要访问字符串" name"这是元组的第一个元素:
os.path.splitext("name.fasta")[0]
然后你想为这个名字添加一个新的扩展名:
os.path.splitext("name.fasta")[0]+".aln"
答案 5 :(得分:5)
正如AnaPana提到的那样,pathlib在python 3.4中更新,更容易,并且有一个新的with_suffix方法可以轻松解决此问题:
from pathlib import Path
new_filename = Path(mysequence.fasta).with_suffix('.aln')
答案 6 :(得分:2)
可悲的是,我遇到了文件名上有多个点的情况,但splittext效果不佳...我的解决方法是
file = r'C:\Docs\file.2020.1.1.xls'
ext = '.'+ os.path.realpath(file).split('.')[-1:][0]
filefinal = file.replace(ext,'.zip')
os.rename(file ,filefinal)
答案 7 :(得分:1)
使用pathlib并保留完整路径:
from pathlib import Path
p = Path('/User/my/path')
new_p = Path(p.parent.as_posix() + '/' + p.stem + '.aln')
答案 8 :(得分:1)
>> file = r'C:\Docs\file.2020.1.1.xls'
>> ext = '.'+ os.path.realpath(file).split('.')[-1:][0]
>> filefinal = file.replace(ext,'.zip')
>> os.rename(file ,filefinal)
重复扩展的错误逻辑,示例:'C:\ Docs \ .xls_aaa.xls.xls'