从Python中的IFC文件中提取数据

2024-05-28 20:34:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须提取IFC文件中的数据,但当我阅读该文件时,我似乎犯了一些我无法理解的错误: 第一:我有一把钥匙; 第二:我读了一个文件; 第三:我创建一个字符串,并将其放入一个类似csv的文件中。 第四:可视化组件在Pyside2中。在

代码:

orderNr = self.getIFC_ProjectDetail(readFile, self.orderNrLineEdit.text())
custNr = self.getIFC_ProjectDetail(readFile, self.custNoLineEdit.text())
if len(custNr) == 0:
    custNr = "9999"
projManager = self.getIFC_ProjectDetail(readFile, self.projManagerLineEdit.text())
    drawer = self.getIFC_ProjectDetail(readFile, self.drawerLineEdit.text())

ifcFile = open(readFile, 'r')
csvFile = open(csvFileName, 'w')
lineTokens = []
csvFile.write("GUID;Type;UserText1;UserText2;UserText3;UserText4;UserText5;UserText6;UserText7;\n")
 for mainLine in ifcFile:
    if ("IFCSLAB" in line or "IFCWALLSTANDARDCASE" in line):
                if len(uID) > 0:
                    if uID == oldID:
                        uID = "ciao"
                    csvFile.write("{0};{1};{2};{3};{4};{5};{6};{7};{8};\n".format(uID, matType, orderNr, custNr, assPos, partPos, fab, projManager, drawer))
                    oldID = uID
                    uID = ""
                    matType = ""
                    assPos = ""
                    partPos = ""
                    fab = ""
                lineTokens = line.split(",")
                headerLine = line[0:line.find("'")]
                line = line[line.find("(") +1:len(line)]
                lineTokens = line.split(",")
                uID = lineTokens[0]
                uID = uID[1:len(uID)-1]
                matType = lineTokens[2]
                matType = matType[1:len(matType)-1] 
                floorName = lineTokens[4]
                floorName = floorName[1:len(matType)-1]
            if self.assPosLineEdit.text() in line:
                assPos = self.getIFC_EntityProperty(line, self.assPosLineEdit.text())
            if self.partPosLineEdit.text() in line:
                partPos = self.getIFC_EntityProperty(line, self.partPosLineEdit.text())
            if self.fabricatorLineEdit.text() in line:
                fab = self.getIFC_EntityProperty(line, self.fabricatorLineEdit.text())
        if i == progDlg.maximum():
            csvFile.write("{0};{1};{2};{3};{4};{5};{6};{7};{8};\n".format(uID, matType, orderNr, custNr, assPos, partPos, fab, projManager, drawer))
 ifcFile.close()
 csvFile.close()

def getIFC_EntityProperty(self, row, ifcKey):
    s = ""
    lineTokens = []
    if ifcKey in row:
        lineTokens = row.split(",")
        ifcTag = lineTokens[2]
        ifcTag = ifcTag[0:ifcTag.find("(")]
        #print(ifcTag)
        if len(ifcTag) > 1:
            s = row[row.find(ifcTag)+len(ifcTag)+2:row.rfind(',')-2]
    return s

  def getIFC_ProjectDetail(self, fileName, ifcKey):
    s = ""
    content = open(fileName, 'r')
    lineTokens = []
    for line in content:
        if ifcKey in line:
            lineTokens = line.split(",")
            ifcTag = lineTokens[2]
            ifcTag = ifcTag[0:ifcTag.find("(")]
            if len(ifcTag) > 1:
                s = line[line.find(ifcTag)+len(ifcTag)+2:line.rfind(',')-2]
                break
    content.close()
    return s

问题是它跳转了一个值,移动了一行,并将下面一行中的数据发布到类似csv的文件中,创建了具有正确uID的行,但将行的字段留空。 有人能帮我吗?在


Tags: 文件textinselfuidlenifline

热门问题