Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个python代码是如何读取csv文件的?_Python_Loops_Iterator - Fatal编程技术网

这个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)