0

私はPythonを使い始めましたが、ここで次の問題があります。

  1. count +=1 および他のいくつかの行でのインデント エラー

  2. ディレクトリ内のすべての .csv ファイルをスキャンしていません。このスクリプトを実行すると、最初の列に複数の .csv ファイルの出力ではなく、1 つの .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)    
    
4

2 に答える 2

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モジュールを使用することです。

于 2012-08-08T22:39:49.820 に答える
0

SO が質問をどのようにフォーマットしたかを説明すると、 で始まる余分なスペースがあるように見えますfor line in csv.readlines():。余分なスペースは、インデント エラーの原因になります。他のすべてについては、フォーマットを修正していただく必要があります。Python は空白に依存しているため、そのままにしておくようにしてください。

于 2012-08-08T21:57:41.337 に答える