有人可以帮助我,我正在尝试将一个optparse与一个csv阅读器联系起来,但我一直无法这样做。以下是我的代码:
import csv
from optparse import OptionParser
parser = OptionParser()
parser.add_option('--i1', action='store', type='string', dest='input1file', help='[REQUIRED] The input .csv file path.')
(options, args) = parser.parse_args()
input1file = options.input1file
data = csv.reader(open('input1file','r'))
temp = open('C:\Practice\output_edited.csv','a')
for column in data:
temp.write(column[0]+','+column[len(column)-1]+'\n')
print column[0]+','+column[len(column)-1]+'\n'
temp.close()
我不知道如何连接add_option部分,以便用户可以输入文件名路径。 谢谢!
我更新了我的代码。仍然无法让它工作。
UPDATE1:
import sys
import csv
from optparse import OptionParser
parser = OptionParser()
parser.add_option('--i1', action='store', type='string', dest='input1file', help='[REQUIRED] The input .csv file path.')
(options, args) = parser.parse_args()
input1file = options.input1file
try:
input1file = args[1]
except IndexError:
sys.exit("Input file required, none given")
data = csv.reader(open(sys.args[1],'r'))
temp = open('C:\Practice\output_edited.csv','a')
for column in data:
temp.write(column[0]+','+column[len(column)-1]+'\n')
print column[0]+','+column[len(column)-1]+'\n'
temp.close()
答案 0 :(得分:1)
data = csv.reader(open('input1file','r'))
应该是
data = csv.reader(open(input1file,'r'))
根据您的评论,您似乎忘记使用--i1
参数。如果确实需要,你应该强制执行:
e.g:
if not input1file:
print "What? you were supposed to give '--i1 filename', but you didn't. Shame on you!"
sys.exit(1)
请注意,这在argparse
中更容易实现。您只需将required=True
传递给add_argument
方法
答案 1 :(得分:1)
如果您未在命令行中指定--i1
,则options.input1file
为None
,因为您未提供默认值。
myscript.py --i1 input.txt
由于需要--i1
,因此它实际上不应该是一个选项(因为它不是可选的)。从args
获取输入文件,而不是:
parser = OptionParser()
(options, args) = parser.parse_args()
try:
input1file = args[0]
except IndexError:
sys.exit("Input file required, none given")
或者,正如mgilson建议的那样,使用argparse
代替。它支持命名的位置参数。