0

プロンプトから次のように Python でスクリプトを実行しています。

python gp.py /home/cdn/test.in..........

スクリプト内では、入力ファイルのパスを取得する必要がtest.inあり、スクリプトはファイルの内容を読み取って出力する必要があります。これは正常に動作していたコードです。ただし、ファイル パスはスクリプトでハードコーディングされています。ここで、パスをコマンド ライン引数として呼び出したいと思います。

作業スクリプト

             #!/usr/bin/python
             import sys
             inputfile='home/cdn/test.in'
             f = open (inputfile,"r")
             data = f.read()
             print data
              f.close()

スクリプトが機能しない

              #!/usr/bin/python
              import sys
              print "\n".join(sys.argv[1:])
              data = argv[1:].read()
              print data
              f.close()

これにどのような変更を加える必要がありますか?

4

3 に答える 3

3

Brandon の答えは便利な解決策ですが、コードが機能しない理由も説明に値します。

つまり、文字列のリストはファイル オブジェクトではありません。最初のスクリプトではopen、ファイルを作成し、そのオブジェクト (ファイル オブジェクト) を操作します。しかし、書くこと['foo','bar'].read()は何の意味もありません -- リストread()も文字列もできません --'foo'.read()明らかにナンセンスです。inputfile.read()これは、最初のスクリプトを記述するだけの場合と似ています。

わかりやすくするために、コマンドラインで指定されたすべてのファイルからすべてのコンテンツを取得する例を次に示します。これは を使用しないfileinputので、実際に何が起こるかを正確に見ることができます。

# iterate over the filenames passed on the commandline
for filename in sys.argv[1:]:
    # open the file, assigning the file-object to the variable 'f'
    with open(filename, 'r') as f:
        # print the content of this file.
        print f.read()

# Done.
于 2013-05-23T10:37:39.717 に答える
0

うまくいかないスクリプトでは、ファイルを読む前に開いていないだけです。だからそれを

          #!/usr/bin/python

          import sys

          print "\n".join(sys.argv[1:])
          f = open(argv[1:], "r")
          data = f.read()

          print data
          f.close()

また、が定義されていないf.close()ため、これはエラーになります。fただし、上記の変更はそれを処理します。

ところで、コーディング標準に従って、少なくとも 3 文字の長さの変数名を使用する必要があります。

于 2013-05-23T10:46:18.240 に答える