假设index.py
使用 CGI,我有发布文件foo.fasta
来显示文件。我想将foo.fasta
的文件扩展名更改为foo.aln
显示文件。我该怎么做?
147056 次
9 回答
104
使用pathlib.Path的优雅方式:
from pathlib import Path
p = Path('mysequence.fasta')
p.rename(p.with_suffix('.aln'))
于 2017-11-28T09:42:23.477 回答
86
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)
于 2010-05-24T20:23:44.517 回答
82
import os
thisFile = "mysequence.fasta"
base = os.path.splitext(thisFile)[0]
os.rename(thisFile, base + ".aln")
其中 thisFile = 您要更改的文件的绝对路径
于 2011-09-09T14:14:59.967 回答
26
从 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 :)
于 2017-02-10T00:29:45.180 回答
20
用这个:
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"
于 2015-02-11T15:02:50.703 回答
8
正如 AnaPana 提到的 pathlib 在 python 3.4 中更新更容易,并且有新的 with_suffix 方法可以轻松处理这个问题:
from pathlib import Path
new_filename = Path(mysequence.fasta).with_suffix('.aln')
于 2020-05-13T10:23:15.897 回答
3
使用 pathlib 并保留完整路径:
from pathlib import Path
p = Path('/User/my/path')
new_p = Path(p.parent.as_posix() + '/' + p.stem + '.aln')
于 2018-08-20T18:13:03.993 回答
3
可悲的是,我遇到了一个文件名上有多个点的情况,splittext 不能很好地工作......我的工作是:
file = r'C:\Docs\file.2020.1.1.xls'
ext = '.'+ os.path.realpath(file).split('.')[-1:][0]
filefinal = file.replace(ext,'')
filefinal = file + '.zip'
os.rename(file ,filefinal)
于 2020-08-04T13:16:20.180 回答
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'
于 2020-08-10T23:20:54.283 回答