Terminale basılan verinin belli kısmını kesmede hata alıyorum

Merhaba arkadaşlar. mavlink komutu üzerinde çalıştığımda GPS koordinatlarını çekiyordum fakat komutun verisinde sadece lat değerini almak istediğimde hata ile karşılaşıyorum aynı zamanda lon değerlerini almam gerekli fakat beceremedim rica etsem yardımcı olur musunuz? şimdiden teşekkür ederim.

Gömülü fonksiyonlar yardımıyla bu str ifadeyi bir sözlüğe çevirebilirsiniz.

msg = "GLOBAL_POSITION_INT {time_boot_ms : 202280, lat : -353632622, lon : 1491652376, alt : 584030, relative_alt : -53, vx : -1, vy : 2, vz : 0, hdg : 35380}"

# len("GLOBAL_POSITION_INT") + 1 = 20, bu en baştaki metinden ve boşluktan kurtulalım.
msg = msg[20:]

# Baştaki ve sondaki süslü parantezlerden kurtulalım.
msg = msg[1: len(msg) - 1]

# Virgüllerden kurtulalım.
msg = msg.replace(",", "")

# " : " bulunan yerleri ":" ile değiştirelim.
msg = msg.replace(" : ", ":")

# Artık elimizde şöyle bir str ifade var, msg = "time_boot_ms:202280 lat:-353632622 lon:1491652376 alt:584030 relative_alt:-53 vx:-1 vy:2 vz:0 hdg:35380"

# Boşluklara göre split() uygulayalım.
msg = msg.split()

# Döngü kullanarak, verileri bir sözlüğe aktaralım.
dictionary = {}

for element in msg:
    # iki noktaya göre split() uygulayalım.
    key, value = element.split(":")
    dictionary[key] = int(value)

print(dictionary)
print()
# istenen değeri yazdıralım.
print(dictionary["lat"])
{'time_boot_ms': 202280, 'lat': -353632622, 'lon': 1491652376, 'alt': 584030, 'relative_alt': -53, 'vx': -1, 'vy': 2, 'vz': 0, 'hdg': 35380}

-353632622
2 Beğeni

Merhaba, sisteminizde node varsa, "GLOBAL_POSITION_INT"ten sonrası JavaScript nesnesi formunda olduğundan parse etme işini ona yaptırabilirsiniz:

import json, subprocess

node = subprocess.Popen("node", stdin=subprocess.PIPE, stdout=subprocess.PIPE)
js_kismi = msg.partition(" ")[-1]
komut = F"console.log(JSON.stringify({js_kismi}))"
nodeun_ciktisi, _ = node.communicate(komut.encode())
sozluk = json.loads(nodeun_ciktisi)
  • Sisteminizdeki node executable’ına yönelen bir process açıyoruz. Bizim girdileri dinlemesi ve onun çıktılarını dinleyebilmek için stdin ve stdout parametrelerine PIPE paslıyor ve ilgili stream’lere erişebilecek oluyoruz.
  • msg değişkenindeki "GLOBAL_POSITION_INT"ten sonrasını yani aslında ilk boşluktan sonrasını elde ediyoruz; JS nesnesi formunda olan kısım orasıdır.
  • node üzerinden JSON.stringify’ı kullanacağız; stdout’tan yakalayacağımız için log’luyoruz.
  • node’a bu komutu (byte olarak) gönderiyoruz, çıktısını yakalıyoruz (ayriyeten stderr’e yazılanları da gönderiyor, _ ile görmezden geldiğimiz odur).
  • Python’daki json kütüphanesi yardımıyla döndürülen (byte olan) JSON objesini Python sözlüğüne çeviriyoruz.
  • sozluk["lat"] üzerinden erişim sağlanabilir değerlere.
2 Beğeni

Arkadaşlar ellerinize emeğinize sağlık sayenizde sorunu çözdüm çok teşekkür ederim.

2 Beğeni