Import csv in python3

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.
Steffi
User
Beiträge: 26
Registriert: Sonntag 4. Oktober 2020, 20:40

Hi,
Ich bin komplette Anfängerin in Python und muss nun in meinem Studium ein Werkzeug programmieren.
Dafür möchte ich gerne csv Dateien auslesen, bekomme aber das csv für Python 3 unter Linux nicht installiert.
Habe schon die Pakete pip install csv, pip install python3-csv und pip3 install csv probiert. Habe ich alle im Internet gefunden. Leider funktioniert keins.
Hat jemand eine Idee für mich.
Danke
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du damit das Modul csv meinst - das ist schon mit installiert & sollte eigentlich importierbar sein. Hast du das schon mal probiert?
Steffi
User
Beiträge: 26
Registriert: Sonntag 4. Oktober 2020, 20:40

Hi, ja hab es schon probiert übers Terminal zu installieren, da kommt immer folgende Fehlermeldung:
pip install csv
Defaulting to user installation because normal site-packages is not writeable
ERROR: Could not find a version that satisfies the requirement csv (from versions: none)
ERROR: No matching distribution found for csv
und wenn ich dies in Python bei diesem Beispiel probiere:
import csv
with open("05_20.csv") as csvdatei:
csv_reader_object = csv.reader(csvdatei)
for row in csv_reader_object:
print(row)
Dann kommt folgende Fehlermeldung:
Traceback (most recent call last):
File "csv.py", line 29, in <module>
import csv
File "/home/.../csv.py", line 31, in <module>
csv_reader_object = csv.reader(csvdatei)
AttributeError: module 'csv' has no attribute 'reader'
???? Ich bin einfach noch nicht in Python so tief drin.
Sirius3
User
Beiträge: 18264
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast Deine eigene Datei csv.py genannt, das überdeckt dann das Systemmodul csv. Nenne Deine Datei um.
Benutzeravatar
__blackjack__
User
Beiträge: 14027
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Steffi: Anmerkungen zum Quelltext: Bei Textdateien sollte man immer explizit die Kodierung der Datei angeben. Und bei CSV-Dateien muss man noch das `newline`-Argument an `open()` übergeben. Sonst funktioniert das alles nur auf dem Rechner wo man das Programm und die CSV-Dateien geschrieben hat auch sicher, aber unter Umständen nicht mehr auf anderen Rechnern/Systemen.

Der Namenszusatz `object` bringt dem Leser keinen Mehrwert. *Alles* was man an einen Namen binden kann, ist in Python ein Objekt. Da hätte man konsequenterqeise auch `cvsdatei_objekt` und `row_object` schreiben können. Aber es macht halt nur den Namen länger, ohne tatsächlich irgendeine Information zu enthalten.

Code: Alles auswählen

#!/usr/bin/env python3
import csv


def main():
    with open("05_20.csv", encoding="ascii", newline="") as csv_file:
        for row in csv.reader(csv_file):
            print(row)


if __name__ == "__main__":
    main()
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Steffi
User
Beiträge: 26
Registriert: Sonntag 4. Oktober 2020, 20:40

HI,
vielen lieben Dank für eure Hilfe.
ist wohl ein Anfänger-Fehler mit dem Dateinamen. Jetzt geht es. :-)
Könntet Ihr mir noch einen Tipp geben, wie ich eine pdf-Datei in eine csv umwandeln kann. Geht das überhaupt???
LG
Benutzeravatar
__blackjack__
User
Beiträge: 14027
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Steffi: So ganz allgemein für jedes PDF nein, für viele mit einigem Aufwand, für wenige relativ einfach. PDFs enthalten Daten für die Anzeige des Dokuments, wobei da keine Strukturdaten wie Tabellen mehr enthalten sind, sondern nur einzelne Anweisungen um Texte irgendwo auf der Seite zu platzieren und Linien zu zeichnen. Da kommt es dann auf das konkrete PDF und was die Software die es erstellt hat, da gemacht hat, an.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Generisch kann man PDFs aus den von __blackjack__ genannten Gründen nur mit OCR Verfahren einlesen. Aber Tabellen sind da notorisch schwierig.
Steffi
User
Beiträge: 26
Registriert: Sonntag 4. Oktober 2020, 20:40

Hi blackjack,
danke dir für deine Antwort.
ich möchte ein Programm schreiben, mit dem ich Kontoauszüge nach einem Suchbegriff bzw. nach einem bestimmten Betrag durchsuchen kann. Und da dachte ich, dass ich die pdf Kontoauszüge erst einmal in eine csv Datei umwandel und dass ich dann diese einfacherer durchsuchen könnte.
Was sagst du zu meiner Idee?? Oder welche Vorgehensweise wäre einfacherer??
Danke
Steffi
User
Beiträge: 26
Registriert: Sonntag 4. Oktober 2020, 20:40

Hi deets,
danke dir auch für deine Antwort,
Leider weiss ich nicht, was ein OCR Verfahren ist. Ich bin wirklich komplette Anfängerin und kämpfe mich durch mein Semester mit Programmierung.
Vielleicht hast du auch eine Lösung zu meiner Idee, was ich programmieren möchte.
Danke
Sirius3
User
Beiträge: 18264
Registriert: Sonntag 21. Oktober 2012, 17:20

Kontoauszüge sind recht regelmäßig aufgebaut. Da müßte es einigermaßen einfach sein, die Tabellen zu extrahieren. Aber warum nimmst Du nicht gleich einen csv-Export der Kontodaten?
Steffi
User
Beiträge: 26
Registriert: Sonntag 4. Oktober 2020, 20:40

Hi Sirius,
Die meisten Banken stellen ihren Kunden die Kontoauszüge in pdf Form zur Verfügung und leider nicht in csv.
Wollte es praxisnah gestalten.
Habe aber auch schon in csv Format die Kontodaten geladen, leider sind die Daten alle etwas verrutscht und ich weiß nicht, was ich damit anfangen kann.
Wie programmiere ich denn am einfachsten eine Suche nach einem Begriff oder Betrag in einer csv Datei? Lg
Sirius3
User
Beiträge: 18264
Registriert: Sonntag 21. Oktober 2012, 17:20

Man geht Eintrag für Eintag durch die Daten und vergleicht, ob der Begriff oder der Betrag übereinstimmt. Dazu benutzt man eine for-Schleife.
Wenn Du Daten im csv-Format bekommst, dann sollten die nicht verrutscht sein. Das kann nur passieren, wenn es tatsächlich von einem PDF kommt, und dazu muß man die Struktur des PDF genau anschauen. Da die PDFs immer mit dem gleichen Programm erzeugt werden, sollte man die Struktur der Tabellen recht exakt rekonstruieren können.
Benutzeravatar
__blackjack__
User
Beiträge: 14027
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Steffi: Was heisst denn „etwas verrutscht“ konkret?

Und welche Bank bietet denn kein Format an das maschinenlesbar ist? Theoretisch müsste man die via DSGVO dazu bringen können die Daten in maschinenlesbarer Form raus zu rücken.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Rainier
User
Beiträge: 19
Registriert: Mittwoch 22. August 2007, 10:03

Ich vermute mal mit "etwas verrutscht" ist gemeint, dass in der CSV-Datei vor den eigentlichen strukturierten Daten noch andere Daten, wie Kontonummer, Zeitraum der Daten und andere Stammdaten mitgespeichert werden. Jedenfalls macht das meine Bank so auch. Diese Zeilen müssen dann beim einlesen übersprungen werden
Steffi
User
Beiträge: 26
Registriert: Sonntag 4. Oktober 2020, 20:40

HI,
habe die verrutschten Zeilen hinbekommen. Musste bei den Trennoptionen einiges raus nehmen :-) Das Soll und Haben war in den Zeilen verrutscht.
@Sirius: okay mit einer for-Schleife. Danke dir. Ich schaue mal, ob ich das hinbekomme.
Steffi
User
Beiträge: 26
Registriert: Sonntag 4. Oktober 2020, 20:40

Danke euch allen. Das mit den verrutschten Zeilen habe ich nun über Trennoptionen in der csv Datei hinbekommen.
Ich finde nur keinen Ansatz, wie ich nun die csv Datei nach einem Begriff / Betrag durchsuchen kann?!?!
Wie überspringe ich denn Zeilen beim einlesen???
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du kannst keine Zeilen beim einlesen überspringen. Aber du kannst aus allen Zeilen nur die rausfiltern, die dir passen. Mit einer for-schleife und einer Funktion die für eine Zeile angibt, ob die relevant ist.

Code: Alles auswählen

 
matching = []
for row in all_rows:
    if predicate(row):
        matching.append(row)
Sirius3
User
Beiträge: 18264
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie sehen denn Deine Daten aus und wie der Code, den Du bisher hast?
Steffi
User
Beiträge: 26
Registriert: Sonntag 4. Oktober 2020, 20:40

Ich habe bisher folgendes:

import csv
search = input("Suchbegriff: ")
stock = open ("05_20.csv","wb")
reader = csv.reader("05_20")
for row in reader:
for field in row:
if field == input:
print ("Gefunden n")
print (row[0])
print (row[1])
print (row[2])

ich verstehe das mit dem row noch nicht und so richtig funktionieren es nicht. Ich kann zwar ein Suchbegriff eingeben, aber es kommt nichts sinnvolles raus.
ich gebe zum Beispiel Amazon ein und es kommt folgendes raus:

python3 pd.py
Suchbegriff: Amazon
0
5
_
2
0

irgendwas mach ich falsch. Wenn ich Amazon eingebe, muss ich auch row[1] und row[2] raus löschen, sonst geht es nicht.????!!!
Antworten