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.
Benutzeravatar
__blackjack__
User
Beiträge: 14030
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Steffi: Bitte echten, lauffähigen Code zeigen. Das ist so ganz sicher nie gelaufen.
„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

leider kann ich meinen Code nicht mit Einrückungen schicken. Keine Ahnung warum, das nicht geht
Benutzeravatar
sparrow
User
Beiträge: 4535
Registriert: Freitag 17. April 2009, 10:28

Verwened Code-Tags.
Die werden automatisch eingefügt, wenn man im "vollständiger Editor & Vorschau" den </>-Button drückt.
Zwischen die Tags gehört dein Code. Dann bleibt auch die Einrückung erhalten.
Benutzeravatar
__blackjack__
User
Beiträge: 14030
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Steffi: Ich meinte nicht die Einrückung. Der Code ist auch mit Einrückung garantiert nie gelaufen.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

Du mußt lernen, was Variablen sind, nämlich Platzhalter für Werte. Du übergibst csv.reader einen String, aber der hat nichts mit dem File-Objekt zu tun, das in der Zeile davor an die Variable `stock` gebunden wird. Das File-Objekt wird aber zum Schreiben von Binären Daten geöffnet, Du willst aber Text lesen.
Die Variable `search` wird auch nicht verwendet, statt dessen Vergleichst Du `field` mit dem Funktionsobjekt `input`.
Wie Dein Output zustande gekommen ist, kann ich aber von dem Code nicht ableiten.
Steffi
User
Beiträge: 26
Registriert: Sonntag 4. Oktober 2020, 20:40

Code: Alles auswählen

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])
Dieser Code läuft bei mir in Python 3!!! Das ist mein echter Code. Ich möchte gerne als Ausgabe die Zeile vom Kontoauszug haben, in der der Suchbegriff vorkommt.
Ich glaube, dass mein Code nur ausgibt, dass der Begriff in dem Dokument 05 20 vorhanden ist.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Die Einrückung stimmt nicht ganz, eingerückt wird mit 4 Leezeichen. Zwischen die Klammern beim Funktionsaufruf und dem Funktionsnamen gehört keine Leerstelle. Mit dem Code wirst du nie etwas finden, weil du field mit einem Objekt vom Typ builtin_function_or_method vergleichst. Du müsstest mit search vergleichen. Dateien öffnet man mit dem with Statement, da spart man sich das schließen - was bei dir auch komplett fehlt.
Zuletzt geändert von Jankie am Donnerstag 8. Oktober 2020, 06:55, insgesamt 1-mal geändert.
Steffi
User
Beiträge: 26
Registriert: Sonntag 4. Oktober 2020, 20:40

@Sirius: mit welchem befehl lese ich denn text ein? ich würde deine Hinweise gerne umsetzen, weiss aber noch nicht so recht wie.
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

@Steffi: jetzt hast Du ja auch einen anderen Code, da sind Deine drei Ausrufezeichen ganz fehl am Platz.
Und die "Befehle" sind prinzipiell ja ok, aber die Parameter sind falsch, weil Du Variablen falsch benutzt.
Benutzeravatar
sparrow
User
Beiträge: 4535
Registriert: Freitag 17. April 2009, 10:28

Im ein grundlegendes Verständnis zu erhalten, bietet sich das offizielle Tutorial an.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

In `if field == input` vergleichst du, ob der Inhalt der Variable `field` gleich der Funktion `input` ist. Wohlgemerkt, du vergleichst mit der Funktion selber, nicht mit irgendeinem Ergebnis das du durch Aufruf dieser Funktion irgendwann mal eingelesen hast. Dieser Vergleich schlägt natürlich immer fehl.

Was du eigentlich möchtest ist `field` mit `search` zu vergleichen.
Steffi
User
Beiträge: 26
Registriert: Sonntag 4. Oktober 2020, 20:40

Code: Alles auswählen

import csv
search = input("Suchbegriff: ")
with open("05_20.csv","rb"):
	reader = csv.reader("05_20")
	for row in reader:
		for field in row:
			if field == search:
				print ("Gefunden n")
		print (row[0])
Ich vergleiche jetzt mit search und habe die Datei mit with geöffnet. Leider ist das Ergebnis genau dasselbe?!?! <was mache ich falsch?

Ergebnis:
Suchbegriff: amazon
0
5
_
2
0
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

Was falsch ist, habe ich schon ganz zu Anfang geschrieben: Du benutzt die geöffnete Datei nicht. Jetzt ist sie nicht mal mehr einer Variable zugewiesen.
narpfel
User
Beiträge: 690
Registriert: Freitag 20. Oktober 2017, 16:10

@Steffi: Erkläre mal, was die Zeile
Steffi hat geschrieben: Donnerstag 8. Oktober 2020, 19:35

Code: Alles auswählen

	reader = csv.reader("05_20")
macht.
Benutzeravatar
__blackjack__
User
Beiträge: 14030
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Vielleicht hilft es ja auch das einfach mal auszuprobleren:

Code: Alles auswählen

In [1]: import csv                                                              

In [2]: reader = csv.reader("05_20")                                            

In [3]: list(reader)                                                            
Out[3]: [['0'], ['5'], ['_'], ['2'], ['0']]
„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

ich weiss nicht wie ich den Code schreiben soll. Ich probiere viel aus, da ich Python nur ein Semester hatte und sonst auch nicht anwende. Ich hatte die Variable vor "with open" weggelassen, da es mit einer Variablen zu einem Fehler kam. Ich möchte eigentlich jeweils die Zeilen angezeigt bekommen in meiner csv Datei, in dem der Suchbegriff vorkommt. Vielleicht kann mir ja jemand einen Code zeigen der funktioniert. Ich bin langsam völlig verwirrt von den Hinweisen. Sorry.
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

Hat man Dir schon gesagt, aber hier nochmal: eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs.
csv-Dateien sind Text-Dateien, daher ist der Lesemodus "r" und nicht "rb". Das "r" kann man dann auch gleich ganz weglassen, weil das der Default ist. Man sollte daher auch immer das richtige Encoding angeben.
Dann verstehe ich nicht, wie es so schwer sein kann, denn ein funktionierendes Beispiel steht doch in der Dokumentation zu csv.reader, und die sollte immer die erste Quelle sein, wenn man was neues ausprobiert.
csv.reader erwartet als erstes Argument normalerweise ein File-Objekt. Dass man da jedes beliebige iterierbare Objekt übergeben kann, ist eine triviale Verallgemeinerung in Python und oft ganz praktisch, bei Strings aber auch oft ein Quell der Verwirrung. Wenn ich die Sprache designed hätte, hätte ich mit dem jetzigen Wissen Strings nicht direkt iterierbar gemacht, aber das ist eine andere Geschichte.

Code: Alles auswählen

import csv
search = input("Suchbegriff: ")
with open("05_20.csv", encoding="utf8", newline="") as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        if search in row:
            print("Gefunden n")
        print(row[0])
Steffi
User
Beiträge: 26
Registriert: Sonntag 4. Oktober 2020, 20:40

@Sirius: vielen Dank für deine Antwort. Unser Prof hat uns das mit dem Tab bei gebracht, aber ich werde mir jetzt die 4 Leerzeichen angewöhnen.
Habe deinen Code ausprobiert. Leider gibt mir der Code keine Ergebnisse aus. Er funktioniert ohne Fehlermeldungen, aber leider gibt er mir nicht die Zeile aus, in der mein Suchbegriff sich befindet.
Ja, vielleicht tue ich mich hier echt schwer, danke nochmal für den Dokumentations-Link, aber ich kann leider noch nicht einfach so einen Code runter programmieren. Ich muss es jetzt leider in meinem Studium. Daher hoffe ich einfach auf eure Hilfe, auch wenn ich mich etwas blöd hier anstelle.
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

Um sagen zu können, warum nichts ausgegeben wird, brauchen wir den Inhalt der Datei und den eingegebenen Suchbegriff.
Benutzeravatar
__blackjack__
User
Beiträge: 14030
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Der Code sollte bei der Einrückung den ersten Wert jedes Datensatzes ausgeben, unabhängig vom Suchwort. Falls da tatsächlich nichts ausgegeben wird, ist die Datei leer. Vielleicht als Folge von vorherigen Versuchen wo die Datei mit "w" im Dateimodus geöffnet wurde.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten