[英]Python: pass arguments to a script
我有一个工作代码可以从csv列中打印随机行。
#!/usr/bin/python
import csv
import random
**col**=2
with open('<filename>','r') as f:
reader=csv.reader(f)
data=[row[col] for row in reader]
from random import shuffle
shuffle(data)
print '\n'.join(data[:**100**])
f.close();
我想将此脚本参数化。 通过,位置(col)和样本(例如100个值)
我找不到合适的教程来解释这一点。 有什么想法吗 ?
您可以像这样使用sys模块将命令行参数传递给python脚本。
import sys
name_of_script = sys.argv[0]
position = sys.argv[1]
sample = sys.argv[2]
然后您的命令行将是...
./myscript.py 10100
使用argparse模块:
argparse模块使编写用户友好的命令行界面变得容易。 该程序定义了所需的参数,而argparse将找出如何从sys.argv中解析这些参数。 argparse模块还会自动生成帮助和使用消息,并在用户为程序提供无效参数时发出错误。
它非常强大:您可以指定帮助消息,进行验证,提供默认值..无论您想到如何使用命令行参数。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-p", "--position", type=int)
parser.add_argument("-s", "--sample", type=int)
args = parser.parse_args()
col = args.position
sample = args.sample
print col
print sample
这是命令行上的内容:
$ python test.py --help
usage: test.py [-h] [-p POSITION] [-s SAMPLE]
optional arguments:
-h, --help show this help message and exit
-p POSITION, --position POSITION
-s SAMPLE, --sample SAMPLE
$ python test.py -p 10 -s 100
10
100
$ python test.py --position 10 --sample 100
10
100
谈到您提供的代码:
import random
语句 from random import shuffle
移到脚本顶部 f.close()
(尤其是;
)- with
句柄自动关闭文件 修复后的代码如下所示:
#!/usr/bin/python
import argparse
import csv
from random import shuffle
parser = argparse.ArgumentParser()
parser.add_argument("-p", "--position", type=int)
parser.add_argument("-s", "--sample", type=int)
args = parser.parse_args()
with open('<filename>', 'r') as f:
reader = csv.reader(f)
data = [row[args.position] for row in reader]
shuffle(data)
print '\n'.join(data[:args.sample])
多谢你们。
由于缺少权限,我无法安装argaprse-同时。
这是解决方案-
#!/usr/bin/python
import csv # This will help us reading csv formated files.
import sys
import optparse #import optparse
from random import shuffle
parser=optparse.OptionParser()
# import options
parser.add_option('-f','--filename',help='Pass the csv filename')
parser.add_option('-p','--position',help='column position in the file',type=int)
parser.add_option('-s','--sample',help='sample size',type=int)
(opts,args) = parser.parse_args() # instantiate parser
# Program to select random values
with open('<filepath>'+opts.filename,'r') as f:
reader=csv.reader(f)
data=[row[opts.position] for row in reader]
shuffle(data)
#print '\n'.join(data[:opts.sample])
# create o/p file
file=open("<opfilename>.txt","w")
file.write('\n'.join(data[:opts.sample]))
file.close()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.