Werte aus einer Textdatei vergleichen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Herba
User
Beiträge: 2
Registriert: Donnerstag 12. Oktober 2017, 15:55

Schönen guten Tag zusammen,

erster Eintrag, erste Frage.

Ich habe eine Textdatei in der die (x,y)- Bewegungskoordinaten einer Person in der Form: 0.45567//1.95864 abgespeichert sind (siehe Link unten). Die Daten wurden mit Hilfe eines Laserscanners aufgezeichnet und rauschen dementsprechend. Das heißt, dass ständig neue Werte generiert werden, obwohl sich die Person nicht bewegt hat.

Nun möchte ich die Koordinaten zeilenweise vergleichen und erst ab einem bestimmten Sprung von einer Zeile zur nächsten (z.B. Delta > 0.5) sagen, dass hier eine tatsächliche Bewegung stattgefunden hat.

Leider bin ich ein ziemlicher Programmier- Neuling, daher habe ich bis jetzt erst einen dürftigen Ansatz:

Code: Alles auswählen

coord = open("Koordinaten.txt","r")

for line in coord:
	arr = line.split('//')	# Trennung der x und y Koordinaten
	a = float(arr[0])		# Speicher in a den Wert links von "//"
	b = float(arr[1])	# Speicher in b den Wert rechts von "//"
cood.close()
Jetzt muss ich irgendwie eine Schleife entwickeln, welche den x/y- Wert der aktuellen Zeile mit dem x/y- Wert der nachfolgenden Zeile vergleicht. Und genau da fehlt mir der Ansatz.

Ich hoffe, dass ich mein Anliegen hinreichend erklären konnte und freue mich über Tipps und Ideen!

Grüße

https://workupload.com/file/n69VpcJ
heiner88
User
Beiträge: 65
Registriert: Donnerstag 20. Oktober 2016, 07:29

Code: Alles auswählen

coord = open("Koordinaten.txt","r")

old_a = -1.0
old_b = -1.0
for line in coord:
   arr = line.split('//') # Trennung der x und y Koordinaten
   a = float(arr[0])      # Speicher in a den Wert links von "//"
   b = float(arr[1])      # Speicher in b den Wert rechts von "//"
   if old_a == a  and  old_b == b:
       print("wert gleich")
   else:
       print("wert anders")
   old_a = a
   old_b = b
coord.close()
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@heiner88: wenn man "Start"-Werte braucht, sollte man immer daran denken, was passiert, wenn diese "Start"-Werte tatsächlich auftauchen, und das ist bei Koordinaten und -1/-1 ja nicht ausgeschlossen. Besser man nimmt etwas, was nie einen Konflikt geben kann, hier bietet sich None an:

Code: Alles auswählen

previous_coords = None
with open("Koordinaten.txt", "r") as lines:
    for line in lines:
        # Trennung der x und y Koordinaten
        coords = tuple(map(float, line.split('//')))
        if previous_coords == coords:
            print("wert gleich")
        else:
            print("wert anders")
        previous_coords = coords
@Herba: eingerückt wird generell mit 4 Leerzeichen pro Ebene.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Die Lösung könnte man nun noch an die Anforderung anpassen, dass die Messungen einer tolerierten Ungenauigkeit unterliegen dürfen.

Code: Alles auswählen

THRESHOLD = 0.1

class Coordinate:
    
    def __init__(self, x, y):
        self.x = x
        self.y = y
        
    def __eq__(self, other):
        delta_x = self.x - other.x
        delta_y = self.y - other.y
        distance = (delta_x ** 2 + delta_y ** 2) ** 0.5
        return distance <= THRESHOLD


previous_coords = None

with open("Koordinaten.txt", "r") as lines:
    for line in lines:
        # Trennung der x und y Koordinaten
        coords = Coordinate(*tuple(map(float, line.split('//'))))
        if previous_coords and previous_coords == coords:
            print("wert gleich")
        else:
            print("wert anders")
        previous_coords = coords
Herba
User
Beiträge: 2
Registriert: Donnerstag 12. Oktober 2017, 15:55

Klappt alles, vielen Dank für eure Hilfestellungen!

Ein schönes Wochenende
Antworten