这个python代码是如何读取csv文件的?
有人能详细地向我解释一下这个代码是怎么说的吗这个python代码是如何读取csv文件的?,python,loops,iterator,Python,Loops,Iterator,有人能详细地向我解释一下这个代码是怎么说的吗 i = int(0) L = list(); for row in reader: if i != 0: tempNum = convertStr(row[3].replace(",", "")) L.append(tempNum) i += 1 f.close() tempTotal = 0.0 for value in L: tempTotal += value avgStrideDi
i = int(0)
L = list();
for row in reader:
if i != 0:
tempNum = convertStr(row[3].replace(",", ""))
L.append(tempNum)
i += 1
f.close()
tempTotal = 0.0
for value in L:
tempTotal += value
avgStrideDist = tempTotal / i
基本上,所有这些都相当于:
total = sum(map(int, (i.replace(',', '') for i in reader)))
avgStrideDist = total/float(len(reader))
希望这有帮助这段代码的风格很糟糕。您应该阅读并理解python教程。也就是说,我重写了它,希望它更容易理解
reader = ??? # seriously, where is it defined?
f = ??? # likewise, where?
# don't call it L ferchrissakes
next(reader) # ignore first element for whatever reason - this assumes reader is some kind of generator object
converted_strs = [convertStr(row[3].replace(",", "")) for row in reader] #what's convertStr??
f.close() # close the file object held in f, whatever it is.
total = sum(L)
avgStrideDist = float(total)/ len(converted_strs)
如果处理这些数据的唯一方法是计算平均值,则可以使用类似于
reduce
的生成器表达式,而不是列表理解,以避免遍历数据两次;也许你不会,因为这种方法很容易理解。首先,这还不足以提供我们需要的所有细节,但假设读者是这样的:
reader = ??? # seriously, where is it defined?
f = ??? # likewise, where?
# don't call it L ferchrissakes
next(reader) # ignore first element for whatever reason - this assumes reader is some kind of generator object
converted_strs = [convertStr(row[3].replace(",", "")) for row in reader] #what's convertStr??
f.close() # close the file object held in f, whatever it is.
total = sum(L)
avgStrideDist = float(total)/ len(converted_strs)
f = open(filename)
reader = csv.reader(f, dialect='excel')
您可以在此处查看有关
现在有了这段代码:
i = int(0)
L = list();
for row in reader:
if i != 0:
tempNum = convertStr(row[3].replace(",", ""))
L.append(tempNum)
i += 1
这将贯穿除第一行以外的所有行,拆分行并将第4个元素中的“,”字符替换为“”,并将其添加到列表中。这是python的丑陋编码,您可以这样重写:
L = [row[3].replace(',', "") for row in lines[1:]]
或
剩下的只是结果列表上的平均值。这也可以通过更优雅的方式完成,只需执行以下操作:
avg = sum(L) / len(L)
你在哪里找到这个密码的?我们不能告诉你们它在做什么,因为读者并没有定义。您是从python excel阅读器之类的东西中发现的吗?(a)哪一部分让您感到困惑?(b) 您没有包含所有变量的定义。特别是,
reader
未在该代码中定义。我认为缺少一些内容。我看到一个f.close()
,但我没有看到任何打开文件的内容。此外,reader
对象是在哪里创建的?而且,这个代码的风格很糟糕。@CraigHarrison:你可以也应该编辑你的问题。谢谢,这很有帮助。如果我的声望超过14分,我会投票支持你。我是新来的,不用担心!很高兴我能帮忙。但你真的需要更好地表达你的问题。按照别人对你的问题的评论;-)+1,虽然您在原始代码中删除了一个细微的错误,但您的代码并不完全相同。@Wooble:我在显式忽略reader
中的第一个元素。这就是你的意思吗?或者还有另一个(行!=len(L)
?)?是的,原始代码在平均值中使用的计数加上1,即使它跳过了该行。当然,你的版本可能就是他们想要做的。。。
avg = sum(L) / len(L)