optparse csv.reader

时间:2012-08-01 15:44:52

标签: python csv path optparse

有人可以帮助我,我正在尝试将一个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()

2 个答案:

答案 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.input1fileNone,因为您未提供默认值。

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代替。它支持命名的位置参数。