111

假设index.py使用 CGI,我有发布文件foo.fasta来显示文件。我想将foo.fasta的文件扩展名更改为foo.aln显示文件。我该怎么做?

4

9 回答 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 回答