python 小程序 —— 关键信息提取并生成csv文件

# This is a sample Python script.
import sys
import re
import os

def print_hi(name):
    # Use a breakpoint in the code line below to debug your script.
    print(f'Hi, {name}')  # Press Ctrl+F8 to toggle the breakpoint.

def decodeXYZData( inData, searchS, indexDict, dateItem):
    res = []
    sig = 0
    count = 0
    for s in inData:
        if searchS in s:
            sig = 1
        elif sig == 1:
            if "-------- -------- -----" in s:
                sig = 2
                count = 0
        elif sig == 2:
            dict = {}
            line_list = s.split()  # 默认以空格为分隔符对字符串进行切片
            if len(line_list) < 4 :
                break
            indexDict[int(line_list[1])] = count
            count = count + 1
            dict[dateItem[0]] = line_list[1]
            dict[dateItem[7]] = line_list[3]  # 读取出来的是字符
            dict[dateItem[8]] = line_list[4]
            dict[dateItem[9]] = line_list[5]
            res.append(dict)
    return res

def decodeData(inData, searchss, result, indexDict, dateItem):
    sig = "";
    id = 0;
    for s in inData:
        if searchss[0] in s:
            line_list = s.split()
            id = int(line_list[2])
            sig = searchss[0];
        elif searchss[1] in s:
            line_list = s.split()
            id = int(line_list[2])
            sig = searchss[1];
        elif sig == searchss[0]:
            sig = "";
            line_list = s.split()
            idx = indexDict[id]
            result[idx][dateItem[1]] = line_list[1]
            result[idx][dateItem[2]] = line_list[2]
            result[idx][dateItem[3]] = line_list[3]
        elif sig == searchss[1]:
            sig = "";
            line_list = s.split()
            idx = indexDict[id]
            result[idx][dateItem[4]] = line_list[1]
            result[idx][dateItem[5]] = line_list[2]
            result[idx][dateItem[6]] = line_list[3]
    return

def readFileToCsv(fw, rFile, filename):
    search = ["FORCE*  10002", "MOMENT* 10003", "Load Point Information  (Global Reference Frame)"]
    dateItem = ["id", "Fx", "Fy", "Fz", "Tx", "Ty", "Tz", 'x', 'y', 'z']

    fr = open(rFile, "r")
    inData = fr.readlines()
    fr.close()

    indexDict = {}
    result = decodeXYZData(inData, search[2], indexDict, dateItem)
    decodeData(inData, search, result, indexDict, dateItem)

    # id进行排序
    indexSort = sorted(indexDict.items(), key=lambda x: x[0])

    # 写入文档
    for temIndex in indexSort:
        outstr = ""
        if temIndex[0] == 1:
            outstr = outstr + filename

        for temItem in dateItem:
            outstr = outstr + ","
            if temItem == dateItem[7]:  # 多加一个空格
                outstr = outstr + ","

            if temItem in result[temIndex[1]]:
                outstr = outstr + result[temIndex[1]][temItem]
            else:
                outstr = outstr + "0"
        outstr = outstr + "\n"
        fw.write(outstr)
    fw.flush()

if __name__ == '__main__':
    outTitle = ["10002(Force)", "10003(Moment)", "Load Point Information  (Global Reference Frame)"]
    outSubTitle= [["FX(N)", "FY(N)", "FZ(N)"],
                  ["TX(N.mm)", "TY(N.mm)", "TZ(N.mm)"],
                  ["X", "Y", "Z"]]

    print("数据文件夹:")
    rawDir = input()
    fileList = os.listdir(rawDir)
    dirName = rawDir.split("\\")
    csvName = dirName[-1] + ".csv"

    rawDir = rawDir + "\\"
    wFile = rawDir + csvName
    # 写文件头
    fw = open(wFile, "w")
    # write hearder
    tems = ",,{0[0]},,,{0[1]},,,,{0[2]},,\n".format(outTitle)
    fw.write(tems)
    tems = ",Node ID,{0[0][0]},{0[0][1]},{0[0][2]},{0[1][0]},{0[1][1]},{0[1][2]},,{0[2][0]},{0[2][1]},{0[2][2]}\n".format(outSubTitle)
    fw.write(tems)

    # write data
    for temFile in fileList:
        if ".csv" in temFile:
            continue
        file = rawDir + temFile
        readFileToCsv(fw, file, temFile)

    fw.close()
    print_hi('done')

  

posted @ 2021-04-07 19:52  博客园—哆啦A梦  阅读(227)  评论(0)    收藏  举报