-2
import sys, subprocess, glob

mdbfiles = glob.glob('*.res')
for DATABASE in mdbfiles: 

    subprocess.call(["mdb-schema", DATABASE, "mysql"])

    table_names = subprocess.Popen(["mdb-tables", "-1", DATABASE],
                                   stdout=subprocess.PIPE).communicate()[0]
    tables = table_names.splitlines()

    sys.stdout.flush()

    a=str('Channel_Normal_Table')

    for table in tables:
        if table != '' and table==a:

            filename = DATABASE.replace(".res","") + ".csv"
            file = open(filename, 'w')
            print("Dumping " + table)
            contents = subprocess.Popen(["mdb-export", DATABASE, table],
                                        stdout=subprocess.PIPE).communicate()[0]

            # I NEED TO PUT SOMETHING HERE TO SORT AND EXTRACT THE DATA I NEED


            file.write(contents)
            file.close()

データベースからテーブルを抽出しました。と呼びましょうtable。次の操作を実行する必要があり、少し行き詰まりました。

Cycle Test_Time  Current    Voltage
1     7.80E-002 0.00E+000   1.21E-001
1     3.01E+001 0.00E+000   1.19E-001
1     6.02E+001 0.00E+000   1.17E-001
2     9.02E+001 0.00E+000   1.14E-001
2     1.20E+002 0.00E+000   1.11E-001
2     1.50E+002 0.00E+000   1.08E-001
2     1.80E+002 0.00E+000   1.05E-001
2     2.10E+002 0.00E+000   1.02E-001
3     2.40E+002 0.00E+000   9.93E-002
3     2.70E+002 0.00E+000   9.66E-002
3     3.00E+002 0.00E+000   9.38E-002
3     3.10E+002 4.00E-001   1.26E+000
  1. 各サイクルの最後の (最新の) 行を抽出するか、より高度な方法でサイクルを時間で並べ替え、サイクルの行を最新の時間で抽出します。ご覧のとおり、テスト マシンの不具合により、最後の行の時間が常に最新であるとは限りませんが、通常は最新です。しかし、数字が大きいほど遅くなります。
  2. 過去 5 サイクルのすべての行を抽出する
  3. サイクル 4 からサイクル 30 までのすべての行を抽出します。

限られた Python の知識に基づいて辞書やリストを作成して並べ替えるなど、さまざまな方法を試しましたが、いずれも目的の出力にはなりませんでした。それは私を夢中にさせるだけです。どうもありがとう!

4

3 に答える 3

1

pandaspymdbで簡単に仕事をすることができます

pandas を使用すると、時系列データを簡単に処理できます。pandas.DataFrame を見てください。それだけです。

于 2013-06-18T17:53:23.767 に答える