亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

需要幫助在Linux機器上的Python中對已處理的mdb文件進行排序

需要幫助在Linux機器上的Python中對已處理的mdb文件進行排序

一只名叫tom的貓 2021-03-28 10:54:58
我正在嘗試從.mdb文件中提取表,然后過濾該表并將結果吐出到短的.csv文件中。到目前為止,我已經能夠提取所需的表并將其內容保存到.CSV中。但是我不知道如何對數據進行排序并提取所需的必要行。我想我可以保存整個.csv,然后重新打開它,但是由于我需要處理大約2000個mdb文件,所以它將占用大量空間。我只想提取某些行。Cycle Test_Time  Current    Voltage1     7.80E-002 0.00E+000   1.21E-0011     3.01E+001 0.00E+000   1.19E-0011     6.02E+001 0.00E+000   1.17E-0012     9.02E+001 0.00E+000   1.14E-0012     1.20E+002 0.00E+000   1.11E-0012     1.50E+002 0.00E+000   1.08E-0012     1.80E+002 0.00E+000   1.05E-0012     2.10E+002 0.00E+000   1.02E-0013     2.40E+002 0.00E+000   9.93E-0023     2.70E+002 0.00E+000   9.66E-0023     3.00E+002 0.00E+000   9.38E-0023     3.10E+002 4.00E-001   1.26E+000例如,在上表中,我想做以下事情:提取每個周期的最后一行,或更高級的是,按時間對周期進行排序,并提取具有最新時間的周期的行。如您所見,由于我們的測試機故障,最后一行并非總是具有最新時間,但通常會如此。但是數字越大,時間越晚。提取最后五個周期的所有行。提取循環4到循環30中的所有行。這是我的代碼:import sys, subprocess, globmdbfiles = 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()
查看完整描述

1 回答

?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

不處理行的平面列表,而是將其轉換為一種結構,可以更輕松地首先“查詢”數據,可能會更容易。類似于字典列表,其中每個字典代表一個周期:


cycles = {}


rows = contents.splitlines()  # split the `contents` text blob into individual lines


for row in rows[1:]:  # the first line in your question is a header - [1:] skips it

    row = rows.split()  # split each line by whitespace

    cycle = cycles.setdefault(row[0], {'id': row[0], 'rows': []}

    cycle['rows'].append({'cycle':row[0], 'test_time': row[1], 'current': row[2], ...})

然后,您可以按test_time對它們進行排序:


for key, cycle in cycles.items():

    cycles['rows'].sort(key=itemgetter('test_time'))

然后,您可以處理您的數據。每個周期的最后一行:


 for key, cycle in cycles.items():

    output_row(cycles['rows'][-1])

最近五個周期的行:


 for key, cycle in sorted(cycles.items())[:-5]:

    output_rows(cycles['rows'])

從4到30中提取行:


for idx in range(4, 31):

    cycle = cycles[str(idx)]

    output_rows(cycles['rows'])


查看完整回答
反對 回復 2021-04-02
  • 1 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號