대용량 로그 파일에서 GPS 위치만 날짜 스탬프라는 새 파일로 추출합니다.

대용량 로그 파일에서 GPS 위치만 날짜 스탬프라는 새 파일로 추출합니다.

그래서 나는 거대한(100,000개가 넘는 레코드) 로그 파일을 가지고 있고 날짜 스탬프를 기반으로 모든 GPS 위치를 추출해야 합니다.

./production.log.109.gz:I, [2022-02-10T10:00:59.703529 #25190]  INFO -- : #<Event::TeltonikaServer:3ffcbe931d90>:357544377733734 TS: 2022-02-10 10:00:35 +0000, GPS: 52.1773033,20.8162, SAT: 17, KM/H: 0, V: 26343
./production.log.109.gz:I, [2022-02-10T10:01:13.939349 #25190]  INFO -- : #<Event::TeltonikaServer:3ffcbe931d90>:357544377733734 TS: 2022-02-10 10:00:40 +0000, GPS: 52.1773033,20.8162, SAT: 17, KM/H: 0, V: 26352
./production.log.109.gz:I, [2022-02-10T10:10:44.757308 #25190]  INFO -- : #<Event::TeltonikaServer:3ffcbe931d90>:357544377733734 TS: 2022-02-10 10:10:40 +0000, GPS: 52.1773033,20.8162, SAT: 18, KM/H: 0, V: 25924

따라서 기본적으로 이 3개의 레코드를 찾아 10th February 2022잘라서 "GPS:"라는 새 파일에 붙여넣거나 2022-02-10.txt가급적이면 적합한 .KML파일에 붙여넣어야 합니다.

답변1

각 이벤트는 별도의 줄에 있으므로 한 줄씩 읽고 뒤따르는 텍스트를 regex찾는 데 사용할 수 있습니다 . 그런 다음 파일 이름으로 사용하고 쓸 수 있습니다.TS:GPS:TSappend mode


최소한의 작업 예.

나는 메모리의 파일을 시뮬레이션하는 io데만 with를 사용했지만 text다음을 사용해야 합니다.open()

text = '''./production.log.109.gz:I, [2022-02-10T10:00:59.703529 #25190]  INFO -- : #<Event::TeltonikaServer:3ffcbe931d90>:357544377733734 TS: 2022-02-10 10:00:35 +0000, GPS: 52.1773033,20.8162, SAT: 17, KM/H: 0, V: 26343
./production.log.109.gz:I, [2022-02-10T10:01:13.939349 #25190]  INFO -- : #<Event::TeltonikaServer:3ffcbe931d90>:357544377733734 TS: 2022-02-10 10:00:40 +0000, GPS: 52.1773033,20.8162, SAT: 17, KM/H: 0, V: 26352
./production.log.109.gz:I, [2022-02-10T10:10:44.757308 #25190]  INFO -- : #<Event::TeltonikaServer:3ffcbe931d90>:357544377733734 TS: 2022-02-10 10:10:40 +0000, GPS: 52.1773033,20.8162, SAT: 18, KM/H: 0, V: 25924
'''

import io
import re

# open file for reading
#file_in = open("filename.log")
file_in = io.StringIO(text)

# read line by line
for line in file_in:

    # find values
    ts  = re.findall('TS: ([^ ]*) ', line)[0]
    gps = re.findall('GPS: ([^ ]*), ', line)[0]
    val = gps.split(',')
    gps = f'{val[1]},{val[0]}'
    
    print('TS:', ts, '| GPS:', gps)
    
    # open file for writing in `append mode`
    with open(f'{ts}.txt', 'a') as file_out:
        # write in new line
        file_out.write(gps + '\n')

결과:

TS: 2022-02-10 | GPS: 20.8162,52.1773033
TS: 2022-02-10 | GPS: 20.8162,52.1773033
TS: 2022-02-10 | GPS: 20.8162,52.1773033

KML더 복잡한 형식( XML구조체 사용)이므로 작성하지 않겠습니다.
하지만 작성해야 할 Python 모듈이 있습니다 KML.간단한 kml

파일에 추가하는 기능이 없을 수 있으므로 먼저 모든 GPS 값을 가져와 데이터별로 그룹화한 다음 각 그룹에 대해 KML을 생성하고 모든 포인트를 한 번에 저장해야 할 수 있습니다.


편집하다:

text = '''./production.log.109.gz:I, [2022-02-10T10:00:59.703529 #25190]  INFO -- : #<Event::TeltonikaServer:3ffcbe931d90>:357544377733734 TS: 2022-02-10 10:00:35 +0000, GPS: 52.1773033,20.8162, SAT: 17, KM/H: 0, V: 26343
./production.log.109.gz:I, [2022-02-10T10:01:13.939349 #25190]  INFO -- : #<Event::TeltonikaServer:3ffcbe931d90>:357544377733734 TS: 2022-02-10 10:00:40 +0000, GPS: 52.1773033,20.8162, SAT: 17, KM/H: 0, V: 26352
./production.log.109.gz:I, [2022-02-10T10:10:44.757308 #25190]  INFO -- : #<Event::TeltonikaServer:3ffcbe931d90>:357544377733734 TS: 2022-02-10 10:10:40 +0000, GPS: 52.1773033,20.8162, SAT: 18, KM/H: 0, V: 25924
'''

import io
import re
import simplekml

#f = open("filename.log")
f = io.StringIO(text)

# -----------------------

groups = {}

for line in f:
    ts  = re.findall('TS: ([^ ]*) ', line)[0]
    gps = re.findall('GPS: ([^ ]*), ', line)[0]
    val = gps.split(',')
    gps = [val[1],val[0]]
    
    print('TS:', ts, '| GPS:', gps)
    
    if ts not in groups:
        groups[ts] = []
        
    groups[ts].append(gps)
    
#----------------------------------------
    
for name, values in groups.items():
    print('name:', name)
    
    kml = simplekml.Kml()
    
    for gps in values:
        kml.newpoint(coords=[gps])
        
    # --- after loop ---
    kml.save(f"{name}.kml")

답변2

그래서 며칠 동안 Python을 배운 후 코드를 완전히 변경했습니다.

원래:

  • 파일 data.log 읽기
  • GPS 및 타임스탬프 추출
  • GPS를 연관 배열에 넣기
  • TS를 기반으로 파일에 나열된 배열(예: TS.txt)
  • for 루프를 사용하여 머리글과 바닥글을 추가했습니다.

그렇게 해서 제가 원하는 모습으로 바뀌었습니다. 모두의 도움에 감사드립니다.

관련 정보