Seite 1 von 1

Vergleich zweier Dateien

Verfasst: Freitag 24. Januar 2020, 11:38
von pythonanfaenger1508
Hallo.

Ich habe 2 Dateien unterschiedlichen Typs und möchte diese bzw die Indizes davon vergleichen.
Dafür habe ich die benötigten Indizes gesplittet.
Nun weiß ich aber nicht wie ich die Listen elementenweise vergleichen kann nach den existierenden Indizes.

Kann mir jemand vielleicht einen Tipp geben wie ich mein Vorhaben umsetzen kann?

Code: Alles auswählen


import yaml
import requests
import json
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

r = requests.get('url/', verify=False)
data= json.loads(r.text)
filter_list = data["result"]
#print (filter_list)

for list_a in filter_list:
    test_a = list_a.split("-", 1)
    print (test_a)




with open ('C:\\YAML\\x.yaml', 'r') as yamlfile:
   data = yaml.safe_load(yamlfile)
   #print (data)

for list_b in data:
    test_b = list_b.split(":")
    print (test_b)


Re: Vergleich zweier Dateien

Verfasst: Freitag 24. Januar 2020, 11:52
von __blackjack__
@pythonanfaenger1508: Aus der Frage wird nicht wirklich klar was Du da miteinander vergleichen willst, wie die Eingabedaten aussehen, und wie das Ergebnis aussehen soll.

Weder das herunterladen aus dem Netz noch das laden aus einer YAML-Datei sollte etwas mit dem eigentlichen Vergleich zu tun haben. Es wäre also sinnvoll das weg zu lassen und hier nur die Daten zu zeigen die verglichen werden sollen, so dass man das auch ohne die URL zu kennen und die YAML-Datei zu haben, nachvollziehen kann.

Das `json`-Modul brauchst Du hier übrigens nicht, denn `requests.Response`-Objekte haben eine `json()`-Methode.

Grunddatentypen haben nichts in Namen verloren. Schon mal gar nicht wenn sie falsch sind, denn weder `list_a` noch `list_b` können eine Liste sein.

Re: Vergleich zweier Dateien

Verfasst: Freitag 24. Januar 2020, 12:15
von pythonanfaenger1508
__blackjack__ hat geschrieben: Freitag 24. Januar 2020, 11:52 @pythonanfaenger1508: Aus der Frage wird nicht wirklich klar was Du da miteinander vergleichen willst, wie die Eingabedaten aussehen, und wie das Ergebnis aussehen soll.

Weder das herunterladen aus dem Netz noch das laden aus einer YAML-Datei sollte etwas mit dem eigentlichen Vergleich zu tun haben. Es wäre also sinnvoll das weg zu lassen und hier nur die Daten zu zeigen die verglichen werden sollen, so dass man das auch ohne die URL zu kennen und die YAML-Datei zu haben, nachvollziehen kann.

Das `json`-Modul brauchst Du hier übrigens nicht, denn `requests.Response`-Objekte haben eine `json()`-Methode.

Grunddatentypen haben nichts in Namen verloren. Schon mal gar nicht wenn sie falsch sind, denn weder `list_a` noch `list_b` können eine Liste sein.

Danke für deine Bemerkungen.

Ich versuche es mal zu erläutern.

ich habe eine URL mit den Eingaben
pes-default-prom-
csd-prod-
sab-com-xyv
etc.
also eine Liste mit Strings. Da brauche ich allerdings nur das erste Wort vor dem ersten "-", also nur "pes", "csd", "sab". Das ist der Grund, warum ich in dem oberen Code die url gesplittet habe.

Dann habe ich eine zweite liste, eine .yaml datei mit den Indizes

csd
pks
xiv
nun will ich die beiden Dateien vergleichen, ob ein String in der anderen Datei vorhanden ist oder nicht. Falls vorhanden, eine Meldung rausgeben.

Ich bin sehr neu in Python, deshalb entschuldige die möglichen Fehler von meiner Seite.

Re: Vergleich zweier Dateien

Verfasst: Freitag 24. Januar 2020, 12:37
von __blackjack__
Indizes sind Zahlen die als Index in eine Sequenz verwendet werden, was Du hier also als Indizes benennst sind keine. Und wie die Daten tatsächlich aussehen ist auch immer noch nicht klar, denn das was Du da zeigst ist im ersten Fall kein JSON und im zweiten Fall kein YAML und in beiden Fällen auch keine Python-Datenstruktur die jeweils aus so einer Datei entstanden sein könnte. Zudem macht es im zweiten Fall keinen Sinn an Doppelpunkten zu teilen, denn da sind ja gar keine Doppelpunkte in dem gezeigten Text.

Ohne zu wissen wie die Daten denn nun tatsächlich aussehen, würde ich mal den `set`-Datentyp in den Raum werfen, mit dem man effizient Mengenoperationen durchführen kann. Konkreter könnte man werden wenn man wüsste was „ob ein String in der anderen Datei vorhanden ist oder nicht“ konkret bedeutet. Irgendeiner? Alle?

Re: Vergleich zweier Dateien

Verfasst: Freitag 24. Januar 2020, 12:56
von pythonanfaenger1508
__blackjack__ hat geschrieben: Freitag 24. Januar 2020, 12:37 Indizes sind Zahlen die als Index in eine Sequenz verwendet werden, was Du hier also als Indizes benennst sind keine. Und wie die Daten tatsächlich aussehen ist auch immer noch nicht klar, denn das was Du da zeigst ist im ersten Fall kein JSON und im zweiten Fall kein YAML und in beiden Fällen auch keine Python-Datenstruktur die jeweils aus so einer Datei entstanden sein könnte. Zudem macht es im zweiten Fall keinen Sinn an Doppelpunkten zu teilen, denn da sind ja gar keine Doppelpunkte in dem gezeigten Text.

Ohne zu wissen wie die Daten denn nun tatsächlich aussehen, würde ich mal den `set`-Datentyp in den Raum werfen, mit dem man effizient Mengenoperationen durchführen kann. Konkreter könnte man werden wenn man wüsste was „ob ein String in der anderen Datei vorhanden ist oder nicht“ konkret bedeutet. Irgendeiner? Alle?
Ich habe die JSON datei ja so formattiert, sodass es das steht was ich oben gepostet habe.

Die YAML datei habe ich auch so bearbeitet, um an meinen String zu kommen, den ich brauche. Sonst steht in der Datei sowas drin wie

pes:
group:
- "DF=EXXXX-Linux-Users,"
cyx:
group:
- "DF=EXXXX-Index"

Das geht 400 Zeilen immer so weiter.
Da brauche ich wie schon erwähnt nur den ersten Teil, also "pes", "cyx" etc. Deshalb das Splitten mit ":"

"Ob ein string in der anderen Datei vorhanden ist oder nicht" bedeutet konkret zu prüfen, ob manche Einträge in der JSON-datei auch in der YAML Datei existieren und die dann rausgeben.

Re: Vergleich zweier Dateien

Verfasst: Freitag 24. Januar 2020, 13:17
von Sirius3
Du hast also keine Strings in YAML, sondern ein Wörterbuch, dessen Keys haben aber schon gar kein : mehr. Außerdem ist es sehr effizient zu prüfen, ob ein Key in einem Wörterbuch ist (ähnlich wie bei einem Set).

Code: Alles auswählen

with open ('C:\\YAML\\x.yaml') as yamlfile:
    data = yaml.safe_load(yamlfile)

result = data["result"]
for entry in result:
    prefix = entry.split("-")[0]
    if prefix in data:
        print(prefix)

Re: Vergleich zweier Dateien

Verfasst: Freitag 24. Januar 2020, 13:24
von __blackjack__
@pythonanfaenger1508: Da sind keine Doppelpunkte an denen Du aufteilen könntest. Die Doppelpunkte sind Teil der YAML-Syntax und nicht Teil der Daten selbst. Die YAML-Datei wird also zu einem Wörterbuch in Python und Dich interessieren die Schlüssel davon. Ob ein Wert als Schlüssel in einem Wörterbuch vorhanden ist, kann man mit dem ``in``-Operator prüfen. Die `keys()`-Methode von Wörterbüchern liefert ein `set`-ähnliches Objekt mit den Schlüsseln, das die `set`-Operatoren und eine `isdisjoint()`-Methode unterstützt.

Dir fehlen Grundlagen. Arbeite mal ein Tutorial durch was diese Grundlagen vermittelt. In der Python-Dokumentation befindet sich beispielsweise ein Tutorial. Und dann schau Dir Deine Daten mal in einer interaktiven Python-Shell an, und spiele ein bisschen damit herum um ein Gefühl dafür zu bekommen.

Bei YAML ist wie bei Python Einrückung ein wichtiger Bestandteil der Syntax. Deshalb solltest Du so etwas nicht als Text oder Zitat in Beiträge einfügen, sondern in Code-Tags. Im vollständigen Editor ist das die Schaltfläche mit der Beschriftung „</>“.

Re: Vergleich zweier Dateien

Verfasst: Freitag 24. Januar 2020, 13:41
von pythonanfaenger1508
__blackjack__ hat geschrieben: Freitag 24. Januar 2020, 13:24 @pythonanfaenger1508: Da sind keine Doppelpunkte an denen Du aufteilen könntest. Die Doppelpunkte sind Teil der YAML-Syntax und nicht Teil der Daten selbst. Die YAML-Datei wird also zu einem Wörterbuch in Python und Dich interessieren die Schlüssel davon. Ob ein Wert als Schlüssel in einem Wörterbuch vorhanden ist, kann man mit dem ``in``-Operator prüfen. Die `keys()`-Methode von Wörterbüchern liefert ein `set`-ähnliches Objekt mit den Schlüsseln, das die `set`-Operatoren und eine `isdisjoint()`-Methode unterstützt.

Dir fehlen Grundlagen. Arbeite mal ein Tutorial durch was diese Grundlagen vermittelt. In der Python-Dokumentation befindet sich beispielsweise ein Tutorial. Und dann schau Dir Deine Daten mal in einer interaktiven Python-Shell an, und spiele ein bisschen damit herum um ein Gefühl dafür zu bekommen.

Bei YAML ist wie bei Python Einrückung ein wichtiger Bestandteil der Syntax. Deshalb solltest Du so etwas nicht als Text oder Zitat in Beiträge einfügen, sondern in Code-Tags. Im vollständigen Editor ist das die Schaltfläche mit der Beschriftung „</>“.
Danke für die Kritik!
Ich mache jetzt das tutorial durch.