Import csv in python3
- __blackjack__
- User
- Beiträge: 14028
- 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.
- __blackjack__
- User
- Beiträge: 14028
- 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.
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.
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.
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])
Ich glaube, dass mein Code nur ausgibt, dass der Begriff in dem Dokument 05 20 vorhanden ist.
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.
Im ein grundlegendes Verständnis zu erhalten, bietet sich das offizielle Tutorial an.
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.
Was du eigentlich möchtest ist `field` mit `search` zu vergleichen.
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])
Ergebnis:
Suchbegriff: amazon
0
5
_
2
0
@Steffi: Erkläre mal, was die Zeile
macht.Steffi hat geschrieben: Donnerstag 8. Oktober 2020, 19:35Code: Alles auswählen
reader = csv.reader("05_20")
- __blackjack__
- User
- Beiträge: 14028
- 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.
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.
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.
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])
@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.
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.
- __blackjack__
- User
- Beiträge: 14028
- 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.