另一个列表csv文件在Python问题 [英] Yet Another list csv file in Python Question
问题描述
我有一个文件csv文件在这种格式,我想生成每个步骤的平均值:
已过,标签
120,步骤01
260,步骤02
113,步骤03
100,步骤01
200,步骤02
103,步骤03
但我很难计算出列表。我使用的python脚本是:
用于sys.argv [1:]中的文件:
for row在csv.DictReader(打开(文件)):
label = row ['label']
elapsed = row ['elapsed']
打印已过,标签
我试过了
label.append (row ['elapsed'])
和 label.append('elapsed')
,但在每种情况下都会收到此错误
AttributeError:'str'对象没有属性'append'
我不确定如何得到这个错误。我是新的Python,所以也许我错过了一些方式列表工作...?如果我可以得到一个像[120,100]的步骤01的列表,我可以很容易地求和和平均,但它是列表创建部分,我困在。
非常感谢!
编辑:结果
列表
现在,我有:
用于结果中的项目:
for n in result [item]:
int(n)
print sum(float(result [item] [n]))
但得到此错误
TypeError:list indices必须是整数,而不是str
但是n是一个整数,还是这是指项目...?我想我现在比以前更困惑... mm ...
最终解决方案:非常感谢@Pablo,@agf& ; @ ms4py。你的输入给我这个。
result = dict()
av = []
idx = []
文件在sys.argv [1:]中:
for csv.DictReader(open(file)):
label = row ['label']
elapsed = row ['elapsed' ]
如果结果中的标签:
result [label] .append(elapsed)
else:
result [label] = [elapsed]
for i in sorted result.iterkeys()):
s = sum(int(v)for result in result [i])
a = s / float(len(result [i]))
很遗憾,我只能接受一个答案。再次感谢大家!
解决方案如果你想要的是列表,
从集合import defaultdict
steps = defaultdict(list)
for sys.argv [1:]:
for csv.DictReader(open(file)):
steps [row ['label']]。append(row ['elapsed'])
averages = dict ,sum(value))for key,value in steps.iteritems())
您正在做的是尝试将
row ['elapsed']
中的字符串添加到label
中的字符串,但字符串是不可变的,因此无法附加到。您可以使用string1 + string2
或`'。.join((string1,string2))加入。
编辑:另外,对于你的新错误,看到我的代码的最后一行,或尝试:
averages = {}
for result.iteritems():
print item [0],sum(item [1])$ b $ b$ b b
I have a file csv file in this format, I would like to generate the average for each step:
elapsed,label 120,Step 01 260,Step 02 113,Step 03 100,Step 01 200,Step 02 103,Step 03
but am having a hard time figuring the lists out. The python script that I am using is:
for file in sys.argv[1:]: for row in csv.DictReader(open(file)): label = row['label'] elapsed = row['elapsed'] print elapsed,label
I've tried
label.append(row['elapsed'])
andlabel.append('elapsed')
, but in each case I get this errorAttributeError: 'str' object has no attribute 'append'
I am unsure how to get past this error. I'm new to Python, so perhaps I am missing something in the way lists work ... ? If I can get a list like [120,100] for step 01, I can easily sum and average it, but it is the list creation part that I am stuck on.
Many thanks!
Edit: Sum of
result
listNow, I have this:
for item in result: for n in result[item]: int(n) print sum(float(result[item][n]))
but get this error
TypeError: list indices must be integers, not str
But "n" is an integer already, no ... ? Or is this referring to "item" ... ? I think I am more confused now than before ... mm ...
Final Solution: Many thanks to @Pablo, @agf & @ms4py. Your input brought me to this.
result = dict() av = [] idx = [] for file in sys.argv[1:]: for row in csv.DictReader(open(file)): label = row['label'] elapsed = row['elapsed'] if label in result: result[label].append(elapsed) else: result[label] = [elapsed] for i in sorted (result.iterkeys()): s = sum(int(v) for v in result[i]) a = s/float(len(result[i]))
Sadly I can only accept one answer. Thank you all again!
解决方案If what you want is to make lists,
from collections import defaultdict steps = defaultdict(list) for file in sys.argv[1:]: for row in csv.DictReader(open(file)): steps[row['label']].append(row['elapsed']) averages = dict((key, sum(value)) for key, value in steps.iteritems())
Will give you the averages.
What you're doing is attempting to add the string in
row['elapsed']
to the string inlabel
, but strings are immutable so can't be appended to. You can join them withstring1 + string2
or `''.join((string1, string2)).EDIT: Also, for your new error, See the last line of my code, or, try:
averages = {} for item in result.iteritems(): print item[0], sum(item[1])
这篇关于另一个列表csv文件在Python问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!