String suchen ab Position nach links bis zu einem Zeichen

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
ergo23
User
Beiträge: 6
Registriert: Mittwoch 10. November 2021, 22:58

Hallo Zusammen,

ich habe ein kleines "grosses" Problem. Ich muss eine Seriennummer in einer CSV Datei suchen.
Bekannt sind die MAC-Adresse. Diese wird auch ohne Probleme gefunden. Nun muss ich von dieser Position aus nach links die Seriennummer suchen und als Variable speichern.

mac = "nr1mac1"
file = open('SN.csv','r')
ausgelesen = (file.read())
print (ausgelesen)
print (ausgelesen.find(mac))

und hier die Ausgabe:

>>>
Nr,SN,MAC1,MAC2,MAC3
1,123,nr1mac1,nr1mac2,nr1mac3
2,456,nr2mac1,nr2mac2,nr2mac3
3,789,nr3mac1,nr3mac2,nr3mac3

27
>>>

ich bräuchte nun die Seriennummer "123" als String.
Wie kann ich das lösen?

Vielen Dank für Eure Hilfe.

Beste Grüße,
ergo23
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Indem du die date als CSV Datei behandelst, und mit dem csv-Modul einliest. Und dann Zugriff auf jede Zeile und ihre Elemente hast.
ergo23
User
Beiträge: 6
Registriert: Mittwoch 10. November 2021, 22:58

Hallo __deets__,
Vielen Dank für Deine Hilfe.
Das habe ich vergeblich nun mehrere Stunden probiert :( Ich komm auf keinen Grünen Zweig.
Ich habe das ganze schon als Dictionary eingelesen. Ich versteh nur nicht wie ich nun auf meinen gesuchten Wert komm.
Hast Du vielleicht ein Beispiel für mich?

Gruß
ergo23
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du läufst über alle Zeilen der Datei, und schaust auf den Wert der Mac. Wenn der mir der gesuchten übereinstimmt, gibst du die Spalte mit der Seriennummer zurück.

Code: Alles auswählen

def serial_for_mac(rows, mac):
    for row in rows:
        if row[MAC_INDEX] == mac:
            return row[ROW_INDEX]
ergo23
User
Beiträge: 6
Registriert: Mittwoch 10. November 2021, 22:58

Hallo,

leider kann ich damit garnix anfangen. Ich bin der totale Noob ;)
was soll "der" sein? ich versteh das ganze gleich null...
geht das nicht einfacher ;)

Vielen Dank für Deine schnelle Antwort

Gruß
ergo23
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Es sind 4 Zeilen Code.
Wie viel einfacher soll es denn werden?

Wo genau hängst du denn?
Was genau eine csv-Datei ist, ist dir klar?
Die verarbeitet mit dem entsprechenden csv Modul. Das hat eine gute Dokumentation und ganz unten hast du auch Beispiele.
Ich würde trotzdem anfangen oben zu lesen.
ergo23
User
Beiträge: 6
Registriert: Mittwoch 10. November 2021, 22:58

Hallo,

Vielen Dank für Deine Antwort. Ich will mich nicht unbedingt auf das CSV versteifen.
Mir würde es ja schon reichen, wenn ich in einem Textfile ab einem bestimmten Index nach links bis zu einem gewissen Zeichen suchen kann.
Ja ich kann die CSV auslesen... OK aber dann steh ich wieder vor dem Problem. Wie komm ich an die Seriennummer... Wahrscheinlich geht das ganz easy. Ich stell mich nur dumm. Ich hab leider nur die Möglichkeit mit Python 2.7 unter UEFI zu arbeiten und kann daher werder Pandas noch sonstiges verweden. Daher suche ich nach einer sehr einfachen Methode.

Beste Grüße
ergo23
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Es ist halt eine csv-Datei. Ob du dich nun versteigern willst oder nicht 🤷
Python 2.7 ist tot. Und von Pandas hat hier keiner etwas gesagt.

Ich verstehe auch nicht, warum du so verzweifelt weigerst das Modul zu benutzen. Dafür ist es halt da. Alles andere macht es nur unnötig umständlich.

Wie du an die Seriennummer kommst hat dir __deets__ doch oben schon skizziert.
Manul
User
Beiträge: 53
Registriert: Samstag 13. Februar 2021, 16:00

ergo23 hat geschrieben: Donnerstag 11. November 2021, 00:17 was soll "der" sein?
Ein Tippfehler für "def".
Benutzeravatar
__blackjack__
User
Beiträge: 14076
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Manul: Wohl eher nicht. Das ”der” bezieht sich auf „den Wert der Mac“ aus dem Satz davor.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

@__blackjack__ ich denke schon, das mein 🚗 correct des def der Schuldige war. Hab es mal korrigiert.

@ergo23 Probleme werden nicht beliebig einfach, nur weil man Anfänger ist. Sonst würde ich 747 fliegen. Ohne Vorkenntnisse. Die Nutzung von for-schleifen und Datenstrukturen ist schon notwendig für eigentlich alles.
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

@ergo23: für eine Lösung Deines Problems, mußt Du Dein Problem genau beschreiben, damit Du es in eine Computerverständliche Form übersetzen kannst.
Es gibt kein Links oder Rechts für den Computer.
Dein Code versteht der Computer so: lies die ganze Datei als einen Klumpen Zeichen und suche in dem Haufen, ob irgendwo die Zeichenfolge mac vorkommt.
Wenn Du die Datei aber als Klumpen Zeichen verstehst, dann ist Dein Problem sehr gross.
Zum Glück hast Du nicht einen Klumpen Zeichen, sondern eine csv-Datei, die festen Regeln folgt, und nach dem Lesen hast Du eine Liste von Datensätzen mit jeweils 5 Werten. Dich interessiert der erste Wert, wenn der 3, 4 oder 5 Wert einer bestimmten Zeichenfolge entspricht.
Diese Formulierung macht die Umsetzung in Code sehr einfach. Man muß nur das csv-Modul kennen und wissen wie man mit Listen arbeitet.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1244
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Mensch: Befehl -> Prise Salz hinzufügen
Computer: Ich kann damit nichts anfangen
Mensch: Befehl --> 0,8 Gramm Salz hinzufügen
Computer: ???
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

@DeaD_EyE: warum nicht?

Code: Alles auswählen

PRISE = 0.8g
salz = gewuerzregal.get_by_name('Salz')
topf.add(salz, amount=PRISE)
ergo23
User
Beiträge: 6
Registriert: Mittwoch 10. November 2021, 22:58

Hallo Zusammen,

erst mal vielen Dank für so viele Post´s.
Ich habe mich dazu entschlossen, das CSV File als CSV zu verarbeiten und kann dies auch als Liste importieren.
Nun erhalte ich eine Liste in einer Liste. Mein Problem besteht darin, in dieser Liste zu suchen. Da scheitere ich wohl an der Schleife.
Leider hab ich das Beispiel nicht so ganz verstanden. Ich kann mir zwar einzelne Listen anzeigen lassen, und darin ein Element ausgeben lassen, aber nicht in der Liste einer Liste nach diesem Wert suchen.

Vielen Dank nochmals.

Gruß
ergo23
Benutzeravatar
pillmuncher
User
Beiträge: 1530
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@ergo23: Zeig den Code. Ansonsten kann man nur raten und ewig herumdisktieren, was du gemeint haben könntest.
In specifications, Murphy's Law supersedes Ohm's.
ergo23
User
Beiträge: 6
Registriert: Mittwoch 10. November 2021, 22:58

Hallo Zusammen,

erst mal ganz dickes Dankeschön an alle die sich hier die Mühe gemacht haben.
Ich hab jetzt endlich die Lösung. Ich hab vor lauter Bäumen den Wald nicht gesehen und endlich das Beispiel verstanden ;)
Hier noch da Resultat.

Code: Alles auswählen

import csv
mac1 = "0010F374D2AE"

from csv import reader

with open('SN.csv', 'r') as csv_file:
    csv_reader = reader(csv_file)
    list_of_rows = list(csv_reader)

for row in list_of_rows:
    if row[2] == mac1:
        print row[1]
Somit könnte man den Thread als erledigt betrachten ;)

Beste Grüße und schönes Wochenende
ergo23
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Nicht ganz. Der Doku folgend öffnet man csv Dateien immer mit dem newline Argument. Du kannst außerdem direkt über den Reader iterieren:

Code: Alles auswählen

import csv

mac1 = "0010F374D2AE"

with open('SN.csv', 'r', newline='') as csv_file:
    for row in csv.reader(csv_file):
        if row[2] == mac1:
            print row[1]
Benutzeravatar
__blackjack__
User
Beiträge: 14076
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@einfachTobi: Das Argument gibt es in Python 2 nicht. Dort ist es aber wichtig, aus genau dem gleichen Grund, die Datei im Binärmodus zu öffnen.

Code: Alles auswählen

#!/usr/bin/env python2
# coding: utf-8
from __future__ import absolute_import, division, print_function
import csv


def main():
    mac = "0010F374D2AE"

    with open("SN.csv", "rb") as csv_file:
        for row in csv.reader(csv_file):
            if row[2] == mac:
                print(row[1])


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Ups, ich hatte überlesen, dass es um Python 2 geht. Dann ist natürlich dein Code zu verwenden.
Antworten