Listenarbeit

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.
Antworten
Freumel
User
Beiträge: 69
Registriert: Donnerstag 25. Januar 2018, 13:47

Hallo zusammen,

ich möchte mit einem Programm Listen auf Gemeinsamkeiten überprüfen.
An der Überprüfung scheitert es aktuell noch nicht, viel eher am Einbinden der Daten.

Bisher habe ich alles im Programmcode bestimmt, nun möchte ich die Listen über das Terminal einfügen.

Code: Alles auswählen

name_1=input('>> ')
name_2=input('>> ')

a=[]
b=[]

file=open(name_1,'r')
for line in file:
	a.append(line)
file.close()

file=open(name_2,'r')
for line in file:
	b.append(line)
file.close()

Ich gebe die absoluten Dateipfade per Drag & Drop der Datei in die Konsole direkt an.

Nun möchte ich aber beliebig viele Dateien einbinden können.
Mein Ansatz bisher:

Code: Alles auswählen

data=[]
data.append(input('>>'))

while data[len(data)-1]!='\exit':
	data.append(input('>>'))
Nun überlege ich, wie ich analog zum ersten Skript die Daten einlesen kann. Es handelt sich bei den Daten um Strings, nicht um Floats.
(Peter => Grüne Augen, blaues Hemd, ...
Paul => blaue Augen, buntes Hemd, ... )

Ich bedanke mich schonmal im voraus für eure Hilfe :)
Zuletzt geändert von Freumel am Mittwoch 8. August 2018, 11:43, insgesamt 1-mal geändert.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der erste Code funktioniert 100%ig nicht, denn a.append[line] wirft einen Fehler. Das ist also schon mal nicht der richtige Code, den du zeigst (wenn das bei dir funktioniert).

Und es empfiehlt sich beim Programmieren, Probleme in Teilprobleme zu zerteilen, die fuer sich genommen geloest werden, und die man dann zu groesseren Programmen zusammenfasst. Statt also den immer gleichen Code durchzunummerieren, schreib dir eine Funktion "datei_einlesen", die einen Dateinamen bekommt, und das gewuenschte Ergebnis zurueck liefert.

Und diese Funktion benutzt du dann in einer *anderen* Funktion, die

- eine Eingabe liest.
- diese auf ein Abbruchkriterium prueft (das soll doch dein \exit sein, oder? Besser ohne \, das ist ein Escape-Code, das macht ggf Aerger).
- wenn abbruch, dann die Funktion mit return beendet
- sonst die Eingabe an die datei_einlesen-Funktion ubergibt, und mit deren Ergebnis dann macht, was auch immer damit passieren soll.
Freumel
User
Beiträge: 69
Registriert: Donnerstag 25. Januar 2018, 13:47

Der erste Code funktioniert 100%ig nicht, denn a.append[line] wirft einen Fehler. Das ist also schon mal nicht der richtige Code, den du zeigst (wenn das bei dir funktioniert).
Vertippt. Sorry :)

Ansonsten habe ich das Problem gelöst!
Zwar nicht formschön aber doch gelöst.

Danke für die Hilfe
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Lösung kann so aussehen:

Code: Alles auswählen

from functools import partial

def read_file(filename):
    with open(filename) as f:
        return list(f)

data = [
    read_file(filename)
    for filename in iter(partial(input, '>> '), 'exit')
]
Antworten