0

Python は初めてで、簡単なデータ処理スクリプトを作成する必要があります。コマンドラインのプログラム引数からファイル名を取得し、最初の引数の値を出力するだけの非常に単純なスクリプトを作成しました。

import sys

if __name__ == '__main__':

    fileName = sys.argv[1]

    print "File name is %s" % fileName

次に、プログラムを実行します。 myProgram.py ~/datadir/file.txt

引数が実際にパスであることを python に伝えるものは何もないので、それ自体を推測して ~ を完全修飾パスに解決し、プログラムが出力することに驚いています。

File name is /Users/<my_username>/datadir/file.txt

ただし、コマンドライン引数を引用符で囲むことで回避できます。

myProgram.py "~/datadir/file.txt"
File name is ~/datadir/file.txt

私は Python を学習中なので、誰かがこの暗黙の解決を駆動する理由を説明できるのではないかと思っていました。たとえば、~ で始まるものはすべてパスであると自動的に想定しますか?

4

2 に答える 2

7

文字をホーム ディレクトリに解決するのは Python では~なく、シェルです。Mac OS X を使用しているため、おそらくbash. ファイル名の前後に引用符を追加すると、シェルが~文字を解決するのを停止するため、Python はそれを「そのまま」取得します。

ちなみに、Pythonexpanduserのモジュール内の関数もユーザーのホームディレクトリに解決可能です。os.path~

于 2013-08-21T21:25:37.780 に答える
2

~シンボルは、Unix および Unix 系システムの慣例であり、Python とは関係ありません。つまり、現在のユーザーのホーム ディレクトリを基準にしてこのパスを開始します。

于 2013-08-21T21:25:33.623 に答える