Hallo,
ich möchte ein csv einlesen. Dieses hat zwei Spalten. Die erste enthält filenamen also Strings und die zweite Spalte zahlen.
Ich möchte wenn die Zahl >0 ist dann mit dem filenamen weiter machen. D.h. ich denke es ware gut eine Liste der Filenamen zu haben bei denen der Wert in der zweiten spalte im csv >0 ist.
Leider bin ich noch eine sehr blutige Anfängerin, nicht nur was Python betrifft, sondern Progammierung allgemein.
Ich kann die csv importieren und zeilenweise aufrufen.
Ich habe mir überlegt dass ich direct eine Liste generiere- oder bin ich mit einem dictionary besser beraten?
Mich verwirrt gerade diese kommunikation hier viewtopic.php?t=40304 denn hier wird eine Liste erzeugt und das sei aber nicht gut weil es eine hauptsache es tut lösung ist. Dennoch hatte ich es mir eigentlich genauso vorgestellt. Da ich aber meherer 1000 files in meiner Spalte automatisch aussuchen möchte, möchte ich jetzt nicht mit einer Lösung anfangen bei der ich hier schon lesen kann dass sie nicht gut ist.
Was sollte ich denn machen wenn ich es richtig machen will? Tatsächlich ein Dictionary?
Dass die Liste mit Strings und integer gemischt befüllt ist macht mir gerade auch Kopfzerbrechen weil so natürlich befehele wie len(Liste) nicht funktionieren. Für Tipps bin ich euch sehr dankbar!
Viele Grüße! Beate
Csv Read und einzelne auswählen
- __blackjack__
- User
- Beiträge: 14251
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Beate: Das von Dir verlinkte Thema sagt eigentlich hauptsächlich nur das es auf die Form der Eingabedaten und das was man danach damit machen möchte um entscheiden zu können wie eine geignete Datenstruktur aussieht.
Wenn Deine CSV-Datensätze aus jeweils zwei Spalten bestehen dann braucht man nicht zwingend einen `csv.DictReader` weil man bei zwei Werten noch völlig übersichtlich einfach durch Zuweisung eines Datensatzes an zwei gut gewählte Namen noch ein verständliches Programm hinbekommt. Im anderen Thema hatte dagegen jeder Datensatz ganze 16 Elemente, was ziemlich unübersichtlich ist wenn man da magische Indexwerte statt aussagekräftiger Spaltenbezeichner hat.
Wo sind da bei Dir Zeichenketten und ganze Zahlen vermischt so das `len()` nicht mehr funktioniert? Vom `csv.reader()` kommt ja immer eine Liste pro Datensatz die beide Elemente enthält. Selbst wenn Du die dann in eine Liste steckst, würdest Du die ja nicht nacheinander als einzelne Elemente in die Liste stecken, sondern die Liste mit den beiden Elementen als jeweils *ein* Element anhängen.
Was brauchst Du denn nach dem einlesen für die Weiterverarbeitung? Nur die Dateinamen wo der zweite Wert im Datensatz die Bedingung erfüllt, oder auch den Zahlwert zum Dateinamen?
Wenn Deine CSV-Datensätze aus jeweils zwei Spalten bestehen dann braucht man nicht zwingend einen `csv.DictReader` weil man bei zwei Werten noch völlig übersichtlich einfach durch Zuweisung eines Datensatzes an zwei gut gewählte Namen noch ein verständliches Programm hinbekommt. Im anderen Thema hatte dagegen jeder Datensatz ganze 16 Elemente, was ziemlich unübersichtlich ist wenn man da magische Indexwerte statt aussagekräftiger Spaltenbezeichner hat.
Wo sind da bei Dir Zeichenketten und ganze Zahlen vermischt so das `len()` nicht mehr funktioniert? Vom `csv.reader()` kommt ja immer eine Liste pro Datensatz die beide Elemente enthält. Selbst wenn Du die dann in eine Liste steckst, würdest Du die ja nicht nacheinander als einzelne Elemente in die Liste stecken, sondern die Liste mit den beiden Elementen als jeweils *ein* Element anhängen.
Was brauchst Du denn nach dem einlesen für die Weiterverarbeitung? Nur die Dateinamen wo der zweite Wert im Datensatz die Bedingung erfüllt, oder auch den Zahlwert zum Dateinamen?
“All tribal myths are true, for a given value of 'true'.” — Terry Pratchett, The Last Continent
- __blackjack__
- User
- Beiträge: 14251
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Wenn man nur die Dateinamen braucht (und der Namen `value` ist ein bisschen zu generisch):
Code: Alles auswählen
#!/usr/bin/env python3
import csv
def main():
with open('test.csv', encoding='utf-8') as csv_file:
filenames = [
filename
for filename, value in csv.reader(csv_file)
if int(value) > 0
]
print(filenames)
if __name__ == '__main__':
main()“All tribal myths are true, for a given value of 'true'.” — Terry Pratchett, The Last Continent
#####Versuche es mit Pandas da das Filtern kann##########
Auswahl= []
df =[]
df = pd.read_csv("shortinputList_header.csv")
print (df)
Auswahl = df['File'][df['Cycle']> 0].tolist()
print(Auswahl)
Das funktioniert ... JUHU ich habe das alleine gefunden
Auswahl= []
df =[]
df = pd.read_csv("shortinputList_header.csv")
print (df)
Auswahl = df['File'][df['Cycle']> 0].tolist()
print(Auswahl)
Das funktioniert ... JUHU ich habe das alleine gefunden
HI black jack, deine antwort hat es mir erst jetzt gezeigt... danke für die schelle Antwort. Mein Value ist eine Zahl von -48 bis +48 - aber ich denke ich bin mit der sortier-funktion von pandas erst mal ganz glücklich ist weil es meinem vertrauten excel nahe kommt 
diese beiden Zeilen kannst du weglassen, Variablennamen müssen nicht "initialisiert" werden.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
