データ解析スクリプトを起動して実行しようとしています。データ操作に関する限り機能します。私がやろうとしているのは、これをセットアップして、1つのコマンドで複数のユーザー定義CSVを入力できるようにすることです。
例えば.
> python script.py One.csv Two.csv Three.csv
出力CSVの命名を自動化する方法についてアドバイスがある場合は、input = test.csv
、output = test1.csv
、私も同様に感謝します。
取得
TypeError: coercing to Unicode: need string or buffer, list found
路線
for line in csv.reader(open(args.infile)):
私のコード:
import csv
import pprint
pp = pprint.PrettyPrinter(indent=4)
res = []
import argparse
parser = argparse.ArgumentParser()
#parser.add_argument("infile", nargs="*", type=str)
#args = parser.parse_args()
parser.add_argument ("infile", metavar="CSV", nargs="+", type=str, help="data file")
args = parser.parse_args()
with open("out.csv","wb") as f:
output = csv.writer(f)
for line in csv.reader(open(args.infile)):
for item in line[2:]:
#to skip empty cells
if not item.strip():
continue
item = item.split(":")
item[1] = item[1].rstrip("%")
print([line[1]+item[0],item[1]])
res.append([line[1]+item[0],item[1]])
output.writerow([line[1]+item[0],item[1].rstrip("%")])
エラーの原因がよくわかりません。誰かがこれを素人の言葉で説明できますか?
私はプログラミング/ Python全体としては初心者で、基本的に一人で学習しているので、できれば何が悪いのか/どのように修正するかを説明して、今後の参考のために書き留めてください。
_args.infile
_はファイル名のリストであり、1つのファイル名ではありません。それをループする:
_for filename in args.infile:
base, ext = os.path.splitext(filename)
with open("{}1{}".format(base, ext), "wb") as outf, open(filename, 'rb') as inf:
output = csv.writer(outf)
for line in csv.reader(inf):
_
ここでは、os.path.splitext()
を使用して拡張子とベースファイル名を分割しているため、ベースに_1
_を追加して新しい出力ファイル名を生成できます。
.add_argument
にnargs
引数を指定すると、引数は常にリストとして返されます。
指定したすべてのファイルを処理する場合は、そのリストをループ処理します。
for filename in args.infile:
for line in csv.reader(open(filename)):
for item in line[2:]:
#to skip empty cells
[...]
または、本当に単一のファイルを指定できるようにしたい場合。 nargs="+"
を取り除くだけです。