使用python从多个元数据文件中提取特定文本

2024-04-26 14:46:42 发布

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

如何从下面的文本中提取WESTBOUNDINGCOORDINATE、NORTHBOUNDINGCOORDINATE、EASTBOUNDINGCOORDINATE和SOUTHBOUNDINGCOORDINATE? 但是,并非所有元文件的文本都在同一行中,例如,fine one具有
WESTBOUNDINGCOORDINATE在第2行,但文件2在第4行。请帮忙。。。你知道吗

    GROUP                  = BOUNDINGRECTANGLE              

    OBJECT                 = WESTBOUNDINGCOORDINATE             
      NUM_VAL              = 1              
      VALUE                = 80.8290376770946               
    END_OBJECT             = WESTBOUNDINGCOORDINATE             

    OBJECT                 = NORTHBOUNDINGCOORDINATE                
      NUM_VAL              = 1              
      VALUE                = 39.9999999964079               
    END_OBJECT             = NORTHBOUNDINGCOORDINATE                

    OBJECT                 = EASTBOUNDINGCOORDINATE             
      NUM_VAL              = 1              
      VALUE                = 104.443461525786               
    END_OBJECT             = EASTBOUNDINGCOORDINATE             

    OBJECT                 = SOUTHBOUNDINGCOORDINATE                
      NUM_VAL              = 1              
      VALUE                = 29.9999999973059               
    END_OBJECT             = SOUTHBOUNDINGCOORDINATE                

  END_GROUP              = BOUNDINGRECTANGLE

我的代码:

metafiles = glob.glob("D://*.txt")
for f in metafiles:
   with open (f, 'r') as infile:
      lines = infile.readlines()
      WESTBOUNDINGCOORDINATE = lines[4][29:45]
      print (WESTBOUNDINGCOORDINATE)

问题是WESTBOUNDINGCOORDINATE值并不总是在同一行中。你知道吗


Tags: 文件文本objectvaluegroupvalnumglob
1条回答
网友
1楼 · 发布于 2024-04-26 14:46:42

尝试遍历文件,忽略所有空行,查找以字符串"OBJECT"开头并以所需坐标结尾的行。你知道吗

例如:

def parse(filepath):
    with open(filepath) as f:
        contents = f.readlines()

    output = {}
    group = {}
    inside_group = False

    for line in contents:
        line = line.strip()
        if line == '':
            continue

        type, value = line.split('=')
        type = type.strip()
        value = value.strip()

        if type == 'OBJECT':
            inside_group = True
        elif type == 'END_OBJECT':
            output[value] = group
            inside_group = False
            group = {}
        elif inside_group:
            group[type] = value

    return output

这将返回以下形式的词典:

>>> parse('file1.txt')
{
    "WESTBOUNDINGCOORDINATE": {
        "NUM_VAL": 1,
        "VALUE": 80.829037677094
    },
    "NORTHBOUNDINGCOORDINATE": {
        "NUM_VAL": 1,
        "VALUE": 39.9999999964079
    },
    # etc
}

然后你就可以从字典里找到你需要的坐标。你知道吗

相关问题 更多 >