3

ユーザー入力に基づいて特定のファイルとディレクトリを書き込むプログラムがpython 2.7にあります。ファイルは 2 つのオペレーティング システムを介して交換されるため、ファイルとディレクトリが Linux と Windows の両方で有効であることを確認する必要があります。ファイルはもともと Linux で作成され、手動で Windows に移動されます。

Python ドキュメント、スタック交換、および Google のいくつかのページを確認しましたが、これはかなり一般的な問題であると想像できるため、奇妙な有用な情報は見つかりませんでした。

簡単な解決策はありますか?

編集: ユーザーが Linux または Windows で機能しないパスを入力した場合に備えて、ディレクトリ ファイル名を検証したいと思います。たとえば、ユーザーが「Folder1/This:Error/File.txt」と入力すると、プログラムはこれをエラーとして認識します。

プログラムは Linux で実行され、Linux でファイルを書き込みますが、後でファイルは Windows に移動されます。スラッシュとバックスラッシュの違いは問題ではありませんが、Linux では機能するが Windows では機能しない可能性がある他の文字は問題を引き起こす可能性があります。

また、多くの場合、ファイルまたはディレクトリは (作成されようとしているために) 存在しないため、文字列で保持されているパスが有効なパスであることを確認する必要があります。

4

3 に答える 3

5

あなたが望むことをする組み込み関数があるかどうかわからないので、自分でやる必要があるかもしれません。

最善の策は、有効であることがわかっている文字の「ホワイトリスト」を作成することです。例: 英数字、アンダースコアなど。次に、ユーザーが指定したファイル名にこのリストにない文字が含まれている場合、エラーをスローします。このホワイトリストが機能するはずのいくつかの文字を除外しても問題ありません。95% (5% が偽陰性である限り) 正しければ問題ないはずです。

無効な文字だけでなく、いくつかの問題がある可能性があることに注意してください。このような関数を作成する際のさまざまな考慮事項については、この質問を参照してください。

最後に、1 つの解決策は、ユーザーに名前を付けさせるのではなく、自分でファイルに名前を付けることです。状況によっては、ファイルを 1 つのファイル名で保存できる場合もありますが、アプリケーションでは別の名前で参照されていることがわかります。もちろん、ユーザーがプログラムの外部でこれらのファイルに直接アクセスする場合、これは混乱を招く可能性があります。

于 2012-07-22T22:54:04.553 に答える
3

あなたの質問はまだ少し漠然としています。異なる OS で作業しているときにディレクトリ パスの構築/指定について話している場合は、osおよび os.pathモジュール、特にos.sepを確認することをお勧めします。

また、パスを作成するときは、文字列関数を使用するのではなく、os.path.join()を使用することをお勧めします。

次に、これらがあります(おそらく、これが「有効な」ファイルとディレクトリの意味です)?

os.path.isdir(パス)

path が既存のディレクトリである場合は True を返します。これはシンボリック リンクをたどるので、同じパスに対して islink() と isdir() の両方が true になる可能性があります。

os.path.isfile(パス)

path が既存の通常ファイルの場合は True を返します。これはシンボリック リンクに従うため、同じパスに対して islink() と isfile() の両方が true になる可能性があります。

他にも os.path 関数os.path.islink()などがあります。これがあなたが求めているものに沿っている場合、そこに答えがあるかもしれません。

于 2012-07-22T21:56:41.343 に答える
-1

os.path.join を使用してディレクトリ文字列を作成すると、現在の環境に応じてパスを正しく記述できます。その後、上記のように os.path.isdir を使用できます。文字列が既存のディレクトリを指しているかどうかを確認する

于 2014-09-28T16:54:48.047 に答える