我目前正在研究python中的宠物项目,用于x-plane但需要一些帮助来解析一些数据。
这是数据样本
1 196 1 0 EGKK London Gatwick
100 45.11 1 1 0.00 1 3 0 08R 51.14510986 -000.21231370 392.89 0.00 5 4 1 1 26L 51.15119014 -000.16819230 267.92 182.88 5 4 1 1
100 45.11 1 1 0.00 0 3 1 08L 51.14691084 -000.21256968 320.96 0.00 4 7 0 1 26R 51.15180116 -000.17681432 416.05 0.00 4 7 0 1
21 51.14622685 -000.20070224 3 77.60 3.00 08R PAPI-4R
21 51.14935802 -000.17789218 2 257.60 3.00 26L PAPI-4L
110 2 0.00 77.70 Parking positions 101-103
111 51.15774074 -000.17453421
111 51.15612096 -000.17392833
111 51.15658181 -000.17088556
113 51.15811289 -000.17149989
111 51.15791243 -000.17250212
111 51.15761372 -000.17239479
111 51.15749171 -000.17330039
113 51.15779042 -000.17341443
110 1 0.00 167.70 Ramp
111 51.15286332 -000.16377606
111 51.15258969 -000.16312609
111 51.15454938 -000.16302507
113 51.15403028 -000.16372478
110 2 0.00 77.50 Twy J west
111 51.14804859 -000.21064157 51 102
111 51.14845633 -000.20754956 51 102
112 51.14845142 -000.20696022 51.14842303 -000.20680182 51 102
111 51.14822704 -000.20686650 51 102
111 51.14787041 -000.20703621
111 51.14809780 -000.20534823 51 102
112 51.14835596 -000.20601269 51.14854333 -000.20604889
111 51.14835596 -000.20601269
112 51.14835596 -000.20601269 51.14846668 -000.20603079 51 102
111 51.14853305 -000.20582527 51 102
111 51.14878419 -000.20507558 51 102
111 51.14915518 -000.20239537 51 102
111 51.15028333 -000.19414918 51 102
112 51.15015284 -000.19308931 51.14990429 -000.19299026 51 102
111 51.14977192 -000.19312473
111 51.14994515 -000.19188237 51 102
112 51.15024605 -000.19228698 51.15042624 -000.19235632 51 102
111 51.15068101 -000.19129646 51 102
111 51.15181209 -000.18271022
111 51.15207776 -000.18279411 51 102
111 51.15170518 -000.18556349
111 51.15134334 -000.18819268 51 102
112 51.15080761 -000.19200036 51.15080249 -000.19202760
111 51.15080761 -000.19200036
112 51.15080761 -000.19200036 51.15073926 -000.19263232 51 102
111 51.15139885 -000.19291562 51 102
111 51.15299423 -000.19345539 51 102
112 51.15345927 -000.19346592 51.15352079 -000.19342233
1 20 1 0 YPAD Adelaide Intl
100 46.02 1 2 0.25 1 3 1 05 -34.95852900 138.51720042 157.89 0.00 5 3 1 1 23 -34.94065900 138.54330673 0.00 61.87 5 3 1 0
100 46.02 1 0 0.25 0 2 1 12 -34.94117850 138.52191000 0.00 0.00 5 3 1 0 30 -34.94939000 138.53698400 0.00 0.00 5 3 1 0
102 H1 -34.93518312 138.53192488 231.46 29.87 29.87 2 0 0 0.00 1
102 H2 -34.94658683 138.52277413 356.62 41.15 39.93 2 0 0 0.00 1
21 -34.94333383 138.54033847 2 230.00 3.00 New PAPI-4L
21 -34.94261483 138.53961547 3 230.00 3.00 New PAPI-4R
21 -34.95335269 138.52397752 2 50.00 3.00 New PAPI-4L
21 -34.94767809 138.53483040 3 303.70 3.00 New PAPI-4R
21 -34.94847005 138.53417115 2 303.70 3.00 New PAPI-4L
21 -34.94320477 138.52444181 3 123.70 3.00 New PAPI-4R
21 -34.94241898 138.52511056 2 123.70 3.00 New PAPI-4L
110 1 1.00 123.70 New Taxiway 199
111 -34.94102671 138.52209460
111 -34.94093997 138.52194695
111 -34.94128895 138.52166396
113 -34.94136359 138.52179930
110 2 1.00 123.70 New Taxiway 213
111 -34.94720010 138.53242703
112 -34.94773614 138.53247063 -34.94793107 138.53226849
111 -34.94814549 138.53282734
111 -34.94759966 138.53339333
111 -34.94776762 138.53436555
112 -34.94716011 138.53434812 -34.94687064 138.53464022
111 -34.94705647 138.53349360
113 -34.94707434 138.53308815
110 4 1.00 0.00 New Taxiway 85
111 -34.93416388 138.53331538
112 -34.93417175 138.53324032 -34.93417896 138.53319052
111 -34.93421978 138.53219165
111 -34.93425647 138.53169827
112 -34.93427328 138.53165726 -34.93428528 138.53164555
111 -34.93435973 138.53166019
111 -34.93474635 138.53169242
111 -34.93546623 138.53082742
112 -34.93547218 138.53049092 -34.93548608 138.53048365
112 -34.93559920 138.53043281 -34.93563294 138.53041587
111 -34.93572637 138.53040795
111 -34.93566141 138.53051888
以1开头的每个行标题代表一个机场,所有后续行标题代表机场的不同方面,例如:
111 Plain Node
112 Node with Bezier Control Point
113 Node Close Loop to close boundary
114 Node Close Loop with Bezier Control Loop
115 Node to Terminate Line
116 Node with Bezier Control Point
那么我将如何解析这个数据文件,并且只读取/使用与该特定数据块相关的信息,即:在1之间进一步向下钻取以使用机场数据等。
答案 0 :(得分:0)
我建议你做的第一件事是写一些代码,让你检查你是否正在处理一个新机场,但这并不消耗那条线。因此,在处理机场特定代码时,您知道下一个代码何时开始。
更难做的是让你能够读取一条线并将其推回去。
一旦您可以实际解析线路并找到新机场,您可以使用它来创建机场对象,该对象知道如何处理不同的非1代码并根据实际代码填写其信息。
#! /usr/bin/env python
# coding: utf-8
from __future__ import print_function
class ParseAirportInfo(object):
def __init__(self, filename):
self._fp = open(filename)
self._line = None
def check(self):
if self._line is None:
self._line = self._fp.readline()
if self._line == '':
return -1
split_line = self._line.split(None, 1)
if split_line and split_line[0] == '1':
return 1
return 0
def read(self):
if self._line:
retval = self._line
self._line = None
return retval
return self._fp.readline()
class Airport(object):
def __init__(self, line):
# split the line starting with 1 and process the info
pass
def process_line(self, line):
# split the line and process depending on the first value
if line == '\n':
return
code, rest = line.split(None, 1)
code = int(code)
if code == 111:
pass
elif code == 110:
pass
airports = []
def main():
pai = ParseAirportInfo('airport.txt')
airport = None
while not pai.check() == -1:
if pai.check() == 1:
airport = Airport(pai.read())
while pai.check() == 0:
l = pai.read()
airport.process_line(l)
main()