CGIindex.py
を使用して、ファイルを表示するための投稿ファイルがあるfoo.fasta
とします。foo.fasta
のファイル拡張子を表示ファイルに変更したいfoo.aln
。どうすればいいですか?
9 に答える
pathlib.Pathを使用したエレガントな方法:
from pathlib import Path
p = Path('mysequence.fasta')
p.rename(p.with_suffix('.aln'))
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=変更するファイルの絶対パス
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が大好きです:)
これを使って:
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"
AnaPanaが述べたように、pathlibはpython 3.4でより新しく、より簡単になり、この問題を簡単に処理できる新しいwith_suffixメソッドがあります。
from pathlib import Path
new_filename = Path(mysequence.fasta).with_suffix('.aln')
pathlibの使用とフルパスの保持:
from pathlib import Path
p = Path('/User/my/path')
new_p = Path(p.parent.as_posix() + '/' + p.stem + '.aln')
悲しいことに、ファイル名に複数のドットがあり、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)
>> 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'