[解決済み] os/path 形式に関係なく、パスからファイル名を抽出します。
質問
オペレーティングシステムやパスの形式に関係なく、パスからファイル名を抽出するためにどの Python ライブラリを使用できますか?
例えば、以下のようなパスをすべて返したい。
c
:
a/b/c/
a/b/c
\a\b\c
\a\b\c\
a\b\c
a/b/../../a/b/c/
a/b/../../a/b/c
解決方法は?
使用方法
os.path.split
または
os.path.basename
Linuxでスクリプトを実行している場合、古典的なWindowsスタイルのパスを処理しようとすると、失敗します。
Windowsのパスでは、パスの区切り文字としてバックスラッシュとフォワードスラッシュのどちらかを使用することができます。そのため
ntpath
モジュール(Windowsで実行する場合はos.pathと等価)は、すべての
(1)
のパスを、すべてのプラットフォームで使用することができます。
import ntpath
ntpath.basename("a/b/c")
もちろん、ファイルの末尾がスラッシュであれば、ベースネームは空になるので、自分で関数を作って対処してください。
def path_leaf(path):
head, tail = ntpath.split(path)
return tail or ntpath.basename(head)
検証を行います。
>>> paths = ['a/b/c/', 'a/b/c', '\\a\\b\\c', '\\a\\b\\c\\', 'a\\b\\c',
... 'a/b/../../a/b/c/', 'a/b/../../a/b/c']
>>> [path_leaf(path) for path in paths]
['c', 'c', 'c', 'c', 'c', 'c', 'c']
(1) 一つだけ注意点がある:Linuxのファイル名
はバックスラッシュを含むことがあります。
. だから、リナックスでは
r'a/b\c'
は常にファイル
b\c
の中で
a
フォルダを参照しますが、Windows では、常に
c
ファイルを
b
のサブフォルダを作成します。
a
フォルダーに格納されます。そのため、パス内でフォワードスラッシュとバックスラッシュの両方が使用されている場合、次のようになります。
必要
を正しく解釈するためには、関連するプラットフォームを知っておく必要があります。実際には、バックスラッシュはLinuxのファイル名ではほとんど使われないので、Windowsのパスだと仮定するのが安全ですが、コーディングする際にはこのことを念頭に置いて、誤ってセキュリティホールを作らないようにしましょう。
関連
-
Python jiabaライブラリの使用方法について説明
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] バイトを文字列に変換する
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] 文字列フォーマット:% vs. .format vs. f-stringリテラル
-
[解決済み】__str__と__repr__の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
PythonはWordの読み書きの変更操作を実装している
-
Python 入出力と高次代入の基礎知識
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。