使用Python解析不同的数据类型

时间:2014-08-10 14:33:13

标签: python file parsing graph

我想解析以下行:

#3 = IFCPERSONANDORGANIZATION(#4,#5,$);

并希望将数字:3,4,5提取为整数值,将“IFCPERSONANDORGANIZATION”提取为字符串值,以便将这些属性保存在带有networkx的图形中。

这是我的代码:

data = []
with open('test.ifc') as f:
    for line in f:
        if line.startswith('#'):
            words = line.rstrip().split('#')
            print(words)
            node = int(words[0])
            data.append(node)

错误:ValueError:int()的基数为10的无效文字:''

如果线路结构每次都不同,我该如何使用正则表达式?像这样:

#3 = IFCPERSONANDORGANIZATION(#4, #5, $);
#2 = IFCOWNERHISTORY(#3, #6, $, .NOTDEFINED., $, $, $, 1348486883);
#4 = IFCPERSON($, 'Bonsma', 'Peter', $, $, $, $, $);
#5 = IFCORGANIZATION($, 'RDF', 'RDF Ltd.', $, $);
#6 = IFCAPPLICATION(#5, '0.10', 'Test Application', 'TA 1001');****

2 个答案:

答案 0 :(得分:0)

您可以使用正则表达式:

import re
line = '#3 = IFCPERSONANDORGANIZATION(#4, #5, $);'
node, name, a, b = re.search(r'(\d+) = (\w+)\(#(\d+), #(\d+), \$\)', line).groups()
node, a, b = map(int, [node, a, b])
print(node, name, a, b)

打印

3 IFCPERSONANDORGANIZATION 4 5

答案 1 :(得分:0)

可能是一个迟到的评论,但是当我进行类似的搜索时,我会提出你的问题并给出答案。 @user3926906 IFC文件结构通常会针对每个不同的文件进行更改。当您使用re.search()时,您是否遇到了分割#实体的任何挑战?我问,因为有些实体没有#来引用其他实体。感谢