1

有人可以帮助我吗,我正在尝试将 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 部分,以便用户可以输入文件名路径。谢谢!

我更新了我的代码。仍然无法让它工作。

更新1:

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()
4

2 回答 2

1
data = csv.reader(open('input1file','r'))

应该

data = csv.reader(open(input1file,'r'))

根据您的评论,您似乎忘记使用该--i1参数。如果确实需要,您应该强制执行:

例如:

if not input1file:
  print "What?  you were supposed to give '--i1 filename', but you didn't.  Shame on you!"
  sys.exit(1)

请注意,这在argparse. 你只需传递required=Trueadd_argument方法

于 2012-08-01T15:52:06.577 回答
1

如果您没有--i1在命令行上指定options.input1fileis 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改用它。它支持命名的位置参数。

于 2012-08-01T16:15:45.550 回答