For循环在Python中读取多个.csv文件

时间:2012-08-08 21:53:42

标签: python for-loop standard-deviation

我开始使用Python并在此处遇到以下问题。

  1. 缩进错误,计数+ = 1和其他几行

  2. 不扫描目录中的所有.csv文件。当我运行此脚本时,它只显示第一列上只有一个.csv文件而不是多个.csv文件输出的输出。我的for循环命令一定存在问题。

  3. 我需要取文件各行的标准差,并取每个文件中所有行的标准差的平均值。

    #!/usr/bin/env python
    
    import os
    
    print "Filename, Min, Max, Average, Mean of Std"
    for file in os.listdir("."):
        if not file.endswith(".csv"):
                continue    
        csv = open(file)    
        sum = 0
        diff = 0
        std = 0
        sumstd = 0
        count = 0
        min = 0
        max = 0
    
        for line in csv.readlines():
            x = line.split(",")
            time  = x[0]
            value = float(x[1])
            sum  += value       
            if value > max:
                max = value
    
            if 0 < value < min:
                min = value 
                count += 1
            avg = sum / count   
    
        import math
                count +=1
                diff += (value - avg)**2
                std = math.sqrt (diff / (count+1)-1)
                sumstd += std
                meanstd = sumstd/count
    
    
    print file + "," + str(min) + "," + str(max) + "," + str(avg) +  "," + str(meanstd)    
    

2 个答案:

答案 0 :(得分:3)

您已使用sum作为变量名称,但这会隐藏内置的sum函数。隐藏内置插件自然是气馁的。

  1. 缩进在Python中很重要。行import math仅缩进for line in csv.readlines():,因此for循环的主体以前一行结尾。推荐的导入位置位于脚本的开头,就像您使用import os一样。

  2. 你有:

    if file.endswith(".csv"):
        continue    
    

    因此,它将跳过名称以“.csv”结尾的文件。你不是说:

    if not file.endswith(".csv"):
        continue    
    

    请注意,这是区分大小写的。

    顺便说一下,推荐使用csv模块阅读CSV文件的方式。

答案 1 :(得分:0)

关于SO如何格式化你的问题,看起来你可能有一个额外的空间从for line in csv.readlines():开始。额外的空间将解释您的缩进错误。至于其他一切,您需要修复格式,以便我们提供任何帮助。 Python依赖于空格,因此请确保完整无缺。