-1

私はこのコードを持っています:

#! /usr/bin/python
import sys, string

def findAll(search, fh):
    count = 0
    for line in fh:
        count += 1
        if line.find(search) != -1:
            print "%3d: %s"%(count, line.rstrip())
    return count

search = raw_input("Enter string to be found: ")
filename = raw_input("Enter filename: ")
fh = open(filename, "rU")
findAll(search, fh)

私の教授は、このコードを書いて「改善された使用法」を組み込むことを勧めました。
方法については混乱していますが、彼女はそれを勧めました

  1. ステートメントをコメントアウトしてプログラムを変更し、raw_input()ステートメントを追加して、プログラムが2つ未満の引数で呼び出されているかどうかを確認し、そうであればprint 'Usage: findstring.py string filename. このコードは文字列を受け取り、それらをファイル内で見つけます。

  2. filenameコマンド ライン引数 fromを使用しsys.argvてファイルを開き、入出力エラー (IOError) の発生に備えます。次に、try-exceptブロックを使用して、ファイルを開くことができるかどうかをエンコードします。
    開くのに失敗した場合、print 'Error: cannot open findstring.pyどこにfindstring.pyあるのかもテキスト ファイルと見なされます。

正直なところ、私は彼女の提案を書き留めるのに忙しく、彼女が提案したことの多くをどうしたらよいかわかりませんでした。誰かがこのコードを改善するのを助けることができますか? 私は混乱していて、これを行う方法がわかりません。私の教授は、コードが実行されると言いましたが、それを変更する方法がわかりません。

4

1 に答える 1

2

使用方法を改善するには、argparse モジュールを使用してみてください。これにより、コマンド ライン オプションをより簡単に使用できるようになります。

http://docs.python.org/library/argparse.html#module-argparse

上記のリンクのコード サンプルは次のとおりです。

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                   help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                   const=sum, default=max,
                   help='sum the integers (default: find the max)')

args = parser.parse_args()
print args.accumulate(args.integers)

ここで、このサンプルを自分の課題に合わせてどのように変更できるかを考えてください。整数の代わりに文字列 (検索語、ファイル名) を使用する必要があります。

try/except ブロックの場合、エラーを処理するコードはブロックの except 部分にあることに注意してください。つまり、except ブロックにエラー メッセージを表示することを検討できます。

于 2012-04-20T04:38:14.250 に答える