Seite 4 von 4

Re: Import csv in python3

Verfasst: Montag 19. Oktober 2020, 09:23
von Sirius3
@benpython: statt os.path benutzt man heutzutage pathlib. Wenn man zusätzlich einen Index braucht nimmt man enumerate. for-Schleifen über einen Index macht man gar nicht. Ist es Absicht, das Zeilen ab 1, Spalten aber ab 0 gezählt werden?
Das found = None wird gar nicht verwendet.
Es wird zweimal re.match aufgerufen, was nur zur Klimaerwärmung beiträgt. Wenn Du schon reguläre Ausdrücke benutzt, dann nutze auch, dass man die Groß-Klein-Schreibung ignorieren kann. Ansonsten wäre es eine einfache in-Prüfung.

Code: Alles auswählen

import re
import csv
from pathlib import Path

abrechnung = Path.home() / "Desktop" / "Abrechnung.csv"
pattern = re.compile(r'(amazon)', re.I)
with abrechnung.open(encoding='cp1252') as csvdatei:
    csv_reader_object = csv.reader(csvdatei, delimiter=';')
    for row_index, row in enumerate(csv_reader_object, 1):
        for column_index, cell in enumerate(row):
            match = pattern.match(cell)
            if match is not None:
                found = match.group(1)
                print(f'Suchwort "{found}" gefunden in Zeile {row_index}, Spalte {column_index}')

Re: Import csv in python3

Verfasst: Montag 19. Oktober 2020, 10:19
von __blackjack__
Moooment: `match()` kann man nicht durch ``in`` ersetzen, das ist `startswith()`. 🙂

Re: Import csv in python3

Verfasst: Mittwoch 21. Oktober 2020, 20:26
von Steffi
HI, danke euch für eure Beiträge. Probiere gleich den Code mal aus.
Mein Code sieht bisher so aus. (sehr anders)

Code: Alles auswählen

import csv

search = input("Suchbegriff: ")
with open("04_20_1.csv",encoding="cp1252") as csvdatei:
    csv_reader_object = csv.DictReader(csvdatei,delimiter=';')
    zeilennummer = 0
    for i in csv_reader_object:
        print(i)
        for search in csv_reader_object:    
            if search == csv_reader_object:
                print("Gefunden")
            else:
                print("error", zeilennummer)
                zeilennummer += 1
Leider funktioniert immer noch nicht mein Finden nach dem Suchbegriff. Er zeit mir immer error, also die else, schleife als Ergebnis.

Re: Import csv in python3

Verfasst: Mittwoch 21. Oktober 2020, 20:37
von Steffi
Habe jetzt den Code von Sirius ausprobiert und wollte noch eine search-Zeile mit Eingabe Suchbegriff einbauen. Leider habe ich jetzt irgendwo einen Fehler eingebaut.

Code: Alles auswählen

import re
import csv
from pathlib import Path

search = input("Suchbegriff: ")
pattern = re.compile(r'(search)', re.I)
with open("04_20_1.csv",encoding="cp1252") as csvdatei:
    csv_reader_object = csv.reader(csvdatei, delimiter=';')
    for row_index, row in enumerate(csv_reader_object, 1):
        for column_index, cell in enumerate(row):
            match = pattern.match(cell)
            if match is not None:
                found = match.group(1)
                print(f'Suchwort "{found}" gefunden in Zeile {row_index}, Spalte {column_index}')

Re: Import csv in python3

Verfasst: Mittwoch 21. Oktober 2020, 20:54
von Steffi
Sorry, Code kam ursprünglich von benpython.
@benpython: danke dir sehr für den code!!

Re: Import csv in python3

Verfasst: Mittwoch 21. Oktober 2020, 20:58
von Sirius3
Wenn Du einen Fehler erhältst, dann poste doch die genaue Fehlermeldung.

Beim vorhergehenden Code: `i` ist ein schlechter Name für eine Zeile. Richtige Namen sind wichtig für das Verständnis. In der inneren for-Schleife überschreibst Du die Variable `search`. Und die kann niemals dem csv_reader_objekt sein. Was willst Du wirklich miteinander vergleichen?
`zeilennummer` zählt keine Zeilen.

Re: Import csv in python3

Verfasst: Donnerstag 22. Oktober 2020, 06:12
von Steffi
Mein Code funktioniert ohne Fehler, ich bekomme dies als Ergebnis:
python3 Neu.py
Suchbegriff: Amazon
OrderedDict([('Buchungstag', '01.04.2020'), ('Wert', '01.04.2020'), ('Umsatzart', 'SEPA-Gutschrift von'), ('Begünstigter / Auftraggeber', 'DB PFK AG'), ('Verwendungszweck', 's.Zahlungsavis'), ('IBAN', '.......'), ('BIC', 'DEUTDEDBFRA'), ('Kundenreferenz', '.'), ('Mandatsreferenz ', ''), ('Gläubiger ID', ''), ('Fremde Gebühren', ''), ('Betrag', ''), ('Abweichender Empfänger', ''), ('Anzahl der Aufträge', ''), ('Anzahl der Schecks', ''), ('Soll', ''), ('Haben', '....'), ('Währung', 'EUR')])
error 0
error 1
error 2
error 3
error 4
error 5
error 6
error 7
error 8
error 9
error 10
error 11
error 12
error 13
error 14
error 15
error 16
error 17
error 18
error 19
error 20
error 21
error 22
error 23
error 24
error 25
error 26
error 27
error 28
error 29
error 30
error 31
error 32
error 33

Dann war das Glück mit der Zeilennummer, aber ich bekomme diese doch mit den Zahlen nach error ausgewiesen.
Okay, also meine zweite for Schleife wird überschrieben und wird deshalb nicht abgefragt. Ich möchte mit der zweiten for Schleife abfrage, ob search, also mein Suchbegriff, in dem csv Text vorhanden ist.

Re: Import csv in python3

Verfasst: Donnerstag 22. Oktober 2020, 06:14
von Steffi
Zu dem anderen Code. WIe kann ich dort eine search-Schleife einbauen??? Was bedeutet denn re.I in der zweiten Zeile???

Re: Import csv in python3

Verfasst: Samstag 24. Oktober 2020, 21:53
von Steffi
Kann mir keiner mehr helfen????

Re: Import csv in python3

Verfasst: Sonntag 25. Oktober 2020, 07:48
von Sirius3
Wobei? Wo ist das konkrete Problem, dass du noch hast?

Re: Import csv in python3

Verfasst: Sonntag 25. Oktober 2020, 15:52
von Steffi
Wie ich oben geschrieben habe. Ich möchte in den Code noch eine Suchschleife einbauen. Aber ich kann diese wohl nicht in pattern packen. Und dann möchte ich gerne das Datum zum Suchbegriff ausgeben und weiss nicht wie.
Hier der Code nochmal mit meinem eingefügten search-Befehl. Ich verstehe auch nicht was in der Zeile pattern re.I bedeutet.

Code: Alles auswählen

import re
import csv
from pathlib import Path

search = input("Suchbegriff: ")
pattern = re.compile(r'(search)', re.I)
with open("04_20_1.csv",encoding="cp1252") as csvdatei:
    csv_reader_object = csv.reader(csvdatei, delimiter=';')
    for row_index, row in enumerate(csv_reader_object, 1):
        for column_index, cell in enumerate(row):
            match = pattern.match(cell)
            if match is not None:
                found = match.group(1)
                print(f'Suchwort "{found}" gefunden in Zeile {row_index}, Spalte {column_index}')

Re: Import csv in python3

Verfasst: Sonntag 25. Oktober 2020, 16:37
von Sirius3
r'(search)' sucht natürlich nach search, dass es auch einer Variable search gibt, spielt zum Glück keine Rolle. Was re.I macht kann man einfach in der Dokumentation des re-Moduls nachlesen. Wenn du aber nicht wirklich reguläre Ausdrücke brauchst, würde ich die an deiner Stelle auch nicht verwenden.
Wenn der Suchbegriff exakt einem Eintrag entsprechen soll, wäre der Vergleich einfach search == cell.