2012-04-20 94 views
-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. 我使用sys.argvfilename命令行參數來打開文件並準備發生輸入/輸出錯誤(IOError)。然後使用try-except塊來編碼如果打開文件是否有效,該如何處理。
    如果開盤失敗,我print 'Error: cannot open findstring.py其中findstring.py也被認爲是文本文件。

說實話......我很忙,寫下她的建議,我不知道如何做很多她推薦的東西。有人可以幫助改進這個代碼嗎?我很困惑,我不知道該怎麼做。我的教授確實說過代碼會運行,但我不知道如何修改它。

+1

http://docs.python.org/tutorial/index.html – 2012-04-20 04:15:54

+1

如果你把敘述分解爲幾個問題,你會更有可能得到答案。 – Shep 2012-04-20 04:49:53

+2

如果你的教授讓你困惑,你應該問你的教授澄清。 – 2012-04-20 05:08:21

回答

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塊中顯示錯誤消息。