Ich versuche, eine durch Kommas getrennte Liste aus einer TXT-Datei (lib.txt) in eine Python-Liste zu importieren. Ich möchte dann jedes Element in der Liste durchlaufen und jeden Wert als Argument an eine andere Funktion übergeben. Sobald die Schleife beendet ist, sollte sie mit dem nächsten Element in der Liste fortfahren und endlos sein, da sie am Ende der Liste von vorne beginnt.

Beispiel für die txt-Datei (lib.txt):

483749, 9384723, 38485903, 4875659, 27388495

Folgendes versuche ich:

def iterateList():
    li=open('lib.txt').readlines()
    li=list(li.split(','))
    for i in li:
        otherFunction(i)

Ich habe ein paar Probleme mit diesem Code. In Python 3.6 kann ich die 3. Zeile (mit li.split) nicht ausführen. Ich vermute, weil li keine Zeichenfolge ist. Aber wenn ich li vor dem Teilen in einen String konvertiere, funktioniert es auch nicht.

Nähere ich mich dem richtig? Würden Sie es anders machen?

Danke für's Nachsehen.

2
boog 7 Feb. 2020 im 21:52

3 Antworten

Beste Antwort

readlines gibt eine Liste zurück, und Sie möchten eine Teilung für eine Zeichenfolge durchführen. Daher müssen Sie stattdessen read verwenden, um eine Zeichenfolge zurückzugeben.

Eine mögliche Lösung wäre:

def iterateList():
    with open('lib.txt') as f:
        data = f.read().split(',')
    while True:
        for i in data:
            otherFunction(i)
2
sheldonzy 7 Feb. 2020 im 19:02

Sie müssen li in Ihrem Code durchlaufen. Schauen Sie sich dies als Beispiel an:

def iterateList():
    li=open('lib.txt').readlines()

    for line in li:
        items = line.split(',')
        for item in items:
            print(item)
            # otherFunction(item)
1
Ali Cirik 7 Feb. 2020 im 19:02
with open("test.txt") as f:
    file = f.readlines()

for line in file:
    numbers = line.split(", ")

    for number in numbers:
        number = number.replace("\n", "")

        print(number)

Ausgänge:

483749
9384723
38485903
4875659
27388495

1. Stellen Sie sicher, dass Sie with open() verwenden.

Dadurch wird sichergestellt, dass Ihr Dateivorgang nach der Verwendung von Python geschlossen wird. Weitere Informationen finden Sie unter docs:

Es wird empfohlen, beim Umgang mit Dateiobjekten das Schlüsselwort with zu verwenden. Der Vorteil ist, dass die Datei nach Abschluss der Suite ordnungsgemäß geschlossen wird, auch wenn irgendwann eine Ausnahme ausgelöst wird.

2. Einfacher zu .split(", ") als zu .split(",")

Da technisch gesehen jede Zahl durch ein Komma getrennt ist, ist es einfacher, beide auf einmal zu erledigen, andernfalls erhalten Sie eine Ausgabe wie folgt:

483749
 9384723
 38485903
 4875659
 27388495\n # We remove the '\n' in number 4 below.

3. Sie müssen die Zeile durchlaufen, um die Wörter zu erfassen.

Hier kommt das for line in file: ins Spiel. Nachdem Sie die Zeile erhalten haben, erhalten Sie die Zahlen; for number in line.split(", ").

4. Ersetzen Sie "\n" durch "".

Da Sie am Ende der Zeile ein \n haben, müssen Sie es durch nichts ersetzen.

1
Felipe 7 Feb. 2020 im 19:06