web-dev-qa-db-ja.com

Pythonでファイル拡張子を変更する

index.py CGIでは、投稿ファイルがありますfoo.fastaファイルを表示します。変わりたい foo.fastaのファイル拡張子はfoo.aln in表示ファイル。どうすればいいですか?

51
MysticCodes

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)
import os
thisFile = "mysequence.fasta"
base = os.path.splitext(thisFile)[0]
os.rename(thisFile, base + ".aln")

ThisFile =変更するファイルの絶対パス

60
FryDay

pathlib.Path を使用したエレガントな方法:

from pathlib import Path
p = Path('mysequence.fasta')
p.rename(p.with_suffix('.aln'))
44
Nikita Malyavin

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が大好きです:)

19
AnaPana

これを使って:

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

そして、上記の仕組みは次のとおりです。

Splitextメソッドは、名前と拡張子を分離してTupleを作成します。

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

作成されたタプルには、文字列「name」と「fasta」が含まれています。次に、タプルの最初の要素である文字列「name」のみにアクセスする必要があります。

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

そして、その名前に新しい拡張子を追加します:

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

Pathlibを使用し、フルパスを保持します。

from pathlib import Path
p = Path('/User/my/path')
new_p = Path(p.parent.as_posix() + '/' + p.stem + '.aln')
2
PollPenn