我想创建一个带有两个命令行参数的程序。第一个是要打开以进行解析的文件的名称,第二个是标志-s的名称。如果用户提供了错误数量的参数或另一个参数不是-s,那么它将打印消息" Usage:[ - s] file_name"并使用exit终止程序。
接下来,我希望我的程序尝试打开文件进行阅读。程序应该打开读取每一行的文件,并返回每个浮点数,整数和其他不是整数或浮点数的字符串的计数。但是,如果打开文件失败,它应该引发异常并打印"无法打开[filename]"并退出使用退出。
我一直在互联网上查找有关Python命令行的大量内容,但我最终感到更加困惑。所以这是我迄今为止所做的尝试,而不是我所研究的内容。
from optparse import OptionParser
def command_line():
parser = OptionParser()
parser.add_option("--file", "-s")
options, args = parser.parse_args()
if options.a and obtions.b:
parser.error("Usage: [-s] file_name")
exit
def read_file():
#Try:
#Open input file
#Except:
#print "Unable to open [filename]"
#Exit
答案 0 :(得分:0)
from optparse import OptionParser
import sys,os
def command_line():
parser = OptionParser("%prog [-s] file_name")
parser.add_option("-s",dest="filename",
metavar="file_name",help="my help message")
options, args = parser.parse_args()
if not options.filename:
parser.print_help()
sys.exit()
return options.filename
def read_file(fn):
if os.path.isfile(fn):
typecount = {}
with open(fn) as f:
for line in f:
for i in line.split()
try:
t = type(eval(i))
except NameError:
t = type(i)
if t in typecount:
typecount[t] += 1
else:
typecount[t] = 1
else:
print( "Unable to open {}".format(fn))
sys.exit()
print(typecount)
read_file(command_line())
一步一步:
--a
或(最好)设置dest="a"
,否则parser.print_help()
比制作自己的更好,然后免费获得-h
/ --help
。command_line
,因此从未收到任何错误,因为语法是正确的。我将命令行设置为仅将文件名作为返回值传递,但是当有更多选项/参数时,有更好的方法可以执行此操作。说到read_file
,而不是对文件使用try-except,我建议使用os.path.isfile
检查文件是否存在。但这并不会检查文件是否具有正确的格式。
然后我们创建一个类型字典,然后遍历所有行并评估由空格(空格,换行符,制表符)分隔的对象。如果您的值由例如。逗号,您需要使用line.split(',')
。
如果您希望稍后在脚本中使用计数,则可能需要返回typecount
而不是打印它。