我有这段代码:
#! /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)
我的教授建议我写这段代码并加入“改进的用法” 我很困惑,但她建议
我通过注释raw_input()
语句来修改程序,然后添加语句以检查是否使用少于2个参数调用程序,如果是,则print 'Usage: findstring.py string filename
。代码接受字符串并将它们定位在文件中。
我使用filename
中的sys.argv
命令行参数打开文件并准备发生输入/输出错误(IOError)。然后使用try-except
块来编码打开文件的工作原理
如果开放失败,我print 'Error: cannot open findstring.py
其中findstring.py
也被视为文本文件。
说实话......我很忙写下她的建议,我不知道如何做她推荐的很多事情。有人可以帮助改进这段代码吗?我很困惑,我不知道该怎么做。我的教授确实说代码会运行,但我不知道如何修改它。
答案 0 :(得分: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块中显示错误消息。