2

Python で並べ替えスクリプトを作成しています。過去にそれほどプログラミングをしたことがないので、いくつかの困難を経験しています。glob 関数を使用して 1 つずつ開く CSV ファイルがたくさんあります。次に、特定の条件を満たす行を並べ替えて出力する必要があります。以下は、データの単純化されたバージョンです。

   Col1    Col2 ....Col 2n
Row 1   30     0.25
Row 2   57     0.11
Row 3   100    0.24
Row 4   55     0.26
Row 5   60     0.28
...................
Row n   11     0.36

すべての行をチェックするときにスクリプトが正常に機能するようになりましたが、もう 1 つの条件を含める必要があります。次々と続く行を順番に印刷したいだけです。つまり、Col 1 > 50 の 3 つの行を印刷したい場合です。したがって、Col_1 が最初の行で >50 の場合、2 行目と 3 行目はそれらの行を印刷します。ただし、Col_1 が Row 1 で 50 を超えているが、Row2 が 50 未満の場合、これらの行をスキップして次の行から開始する必要があります。少し混乱させてすみません。したがって、基本的には、基準を満たすすべての行を連続して印刷する必要があります。上記の例では、条件 Col1>50 を使用して、その条件を満たす 3 つの行を連続して印刷する必要があります。したがって、スクリプトは行 2 ~ 4 を出力する必要があります。

その他: 理想的には、基準を満たす必要がある行の数について、スクリプトでユーザーの入力を取得したいと考えています。したがって、ユーザーが 4 を入力した場合 (行の 4 つの行が基準を満たす必要があります)、10 の場合、10 行すべてが基準を満たす必要があります。また、チェックする行数についても入力したいと思います。だから基本的に:

  1. チェックするサイクル数を入力してください...
  2. 連続して何回のサイクルが基準を満たす必要があります...

後で、サイクル数と条件をドロップダウン リストから選択できる GUI インターフェイスに実装してみます。

これが私のスクリプトです:

csvfiles = glob.glob('/stats/*.stat')
for filename in csvfiles: 
    reader = csv.reader(open(filename))
    for row in reader:                               
            col0, col3, col4, col5, col23, col24, col25 = float(row[0]), float(row[3]), float(row[4]), float(row[5]), float(row[23]), float(row[24]), float(row[25]) 
            if col4 >= 9.00 and col5 > 1.00:
               print("   %.0f   " % col0,'|', "%.12f" % col4, "%.12f" % col5, "%.12f" % (col4/col5), "%.12f" % (100*col25), "%.12f" % col3, "%.12f" % col23, "%.12f" % col24)
4

1 に答える 1

1

前の行を格納するために、カウンターと 2 つの配列を追加します。始めるための疑似コードを次に示します。

csvfiles = glob.glob('/stats/*.stat')
for filename in csvfiles:
    reader = csv.reader(open(filename))
    counter = 0
    temp1 = []
    temp2 = []
    for row in reader:
            col0, col3, col4, col5, col23, col24, col25 = float(row[0]), float(row[3]), float(row[4]), float(row[5]), float(row[23]), float(row[24]), float(row[25])
            if ###YOUR CONDITION IS TRUE
                counter += 1
            else
                counter = 0
            if col4 >= 9.00 and col5 > 1.00 and counter >= 3:
                if counter == 3
                    #PRINT TEMP1
                    #PRINT TEMP2
               print("   %.0f   " % col0,'|', "%.12f" % col4, "%.12f" % col5, "%.12f" % (col4/col5), "%.12f" % (100*col25), "%.12f" % col3, "%.12f" % col23, "%.12f" % col24)
            elif counter == 1
                #store in temp1
            elif counter == 2
                #store in temp2

カウンターは、要件を満たす順番の行数を追跡します。3 つヒットすると、前の 2 行が印刷され、現在の行が印刷されます。3 を超えると、現在の行だけが出力されます。条件が false の場合、counter は 0 に戻され、再び 3 に達するまで何も出力されません。

于 2013-06-11T13:44:25.733 に答える