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

デフォルト値を指定しないため--i1、コマンド ラインで指定しない場合options.input1fileは isです。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 に答える
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=Trueに渡すだけadd_argument

于 2012-08-01T15:52:06.577 に答える