我正在尝试启动并运行数据解析脚本。就数据操作而言,它起作用。我要做的就是设置它,这样我就可以用一个命令输入多个用户定义的CSV。
e.g。
> 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的新手,基本上是单独学习,所以如果可能的话,你可以解释出现了什么问题/如何修复它,以便我可以注意它以供将来参考。
答案 0 :(得分:12)
args.infile
是文件名的列表,而不是一个文件名。循环遍历:
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
添加到基础。
答案 1 :(得分:2)
如果为nargs
指定.add_argument
参数,则该参数将始终作为列表返回。
假设您要处理指定的所有文件,请遍历该列表:
for filename in args.infile:
for line in csv.reader(open(filename)):
for item in line[2:]:
#to skip empty cells
[...]
或者,如果你真的只想指定一个文件;只是摆脱nargs="+"
。