2017-07-05 10 views
0

与えられたユーザー指定の文字列が単純なファイル/フォルダ名であるかどうかを確認しようとしています。 os.path.join()を使用してこの名前をプリセットのルートディレクトリに連結することを計画していますが、そのルートディレクトリの外側の任意の場所を横断しようとするパスを検出して禁止したいとします。Pythonでパスが単純なファイル/フォルダ名であるかどうかを確認する明確な方法はありますか?

たとえば、値 'track001.mp3'の文字列は問題なく、 'root_dir/track001.mp3'に解決されます。しかし、これらが検出され、禁止されるべきである。

'../other_root_dir/' 
'/etc' 
'/' 
'~' 
'subdir/inner_file' 
+0

os.path.listdirを使用して、受け入れ可能なものを列挙して照合するか、あなたの質問を理解できませんでしたか? – PYA

+0

'〜'はなぜ受け入れられないでしょうか?これは、シェルで引用されていない場合のメタキャラクターに過ぎません。それは他のどこでもリテラルチルダです。 – duskwuff

答えて

1

私はあなたが正常には、ユーザが(例えば、「シンプル」または準拠したパス名を渡して)動作しているを想定したと同じようにパス文字列を作成するようアドバイスしています。次に、実際のパス名を取得するには、os.path.expandvarsos.path.normpathを使用します。最後に、実際のパス名がルートディレクトリ内にあることを確認します。次のようなものがあります:

関連する問題