Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Schleifen funktionieren nicht mit readlines()

Python-Schleifen funktionieren nicht mit readlines()

王林
王林nach vorne
2024-02-06 09:54:04584Durchsuche

Python 循环不适用于 readlines()

Frageninhalt

Es sollte die Anzahl der „--------------------------------------“-Zeilen zählen, aber es funktioniert auch nicht kann print("test") verwenden, das nicht in der Konsole angezeigt wird, es wird immer 0 zurückgegeben. Aber zum Beispiel funktioniert die Zeile print("hi"). Das Programm erkennt meine Schleife einfach nicht und ich weiß nicht warum. :(

def check_id():
    with open('data.txt', 'r') as f:
        lines = f.readlines()
        ad = 0
                print("hi")  # this line works
        for i in lines:
            print("test")  # this line doesn't work
            if i == "-------------------------":
                ad += 1

        return str(ad)

Wenn ich den vollständigen Code senden muss, um das Problem zu lösen, fragen Sie bitte nach

Ich habe den Modus „a+“ in „r“ geändert, damit die Zeilen korrekt gelesen werden, und das tut es auch, aber ich kann das Array immer noch nicht überprüfen, um die Anzahl der Zeilen zu ermitteln. Wenn Sie Vermutungen oder Lösungen haben, schreiben Sie diese bitte auf.

EDIT: Hier ist der vollständige Code für meine data.py und der Text in der Datei data.txt

from datetime import date
date = date.today()


def write_note(line):
    with open('data.txt', 'a') as f:
        if line == "!quit":
            f.write('\n')
            f.write("-------------------------")
            f.write('\n')
            ad = check_id()
            f.write(ad)
            f.write('\n')
            f.write("________________________")
            f.write('\n')
        else:
            f.write(line)
            f.write("\n")


def read_note(id):
    with open('data.txt', 'r') as f:
        pass


def see_all():
    with open('data.txt', 'r') as f:
        get_lines = f.readlines()
        for i in get_lines:
            print(i)
        return get_lines


def del_note(ad):
    with open('data.txt', 'a') as f:
        pass


def logs():
    pass


def check_id():
    with open('data.txt', 'r') as f:
        ad = 0
        for i in f:
            if i == "-------------------------":
                ad += 1

        return str(ad)

Jetzt ist es eine TXT-Datei:

fugy
hello
hai
bebra

-------------------------
0
________________________
uha
imna
fsjfoe
geso;rsevdn

-------------------------
0  # This one
________________________

Ich versuche, ein Notizbuch zu erstellen, damit ich Notizen schreiben und sie lesen kann. Funktion löschen. Ich werde es später tun. Die Idee besteht darin, diese Null jedes Mal zu vergrößern, wenn Sie eine Anmerkung hinzufügen.


Richtige Antwort


Ich denke, das Problem besteht darin, dass Ihr data.txt 文件(可能是空的,因为您提到 "test" 在控制台中不可见,这意味着该脚本不在 for 循环中运行,在其他word: lines Iterator die Länge Null hat.

Ich habe einen funktionierenden Code geschrieben. Sie können den Code und die Testdatei mit der Skriptausgabe unten sehen.

Code:

def check_id():
    with open('data.txt', 'r') as opened_file:
        ad = 0
        print("hi")  # this line works
        for i in opened_file:
            print("test")  # this line doesn't work
            if i == "-------------------------":
                ad += 1
        return str(ad)


result = check_id()
print(f"result: {result}")

data.txt Inhalt:

test_1
-------------------------
test_2
-------------------------
test_3
-------------------------
test_4

Test:

> python3 test.py 
hi
test
test
test
test
test
test
test
result: 0

Herausgeber:

op hat den vollständigen Quellcode freigegeben und data.txt,其中包含cr lf字符(有关该字符的详细信息)。这意味着必须使用 rstrip verwendet, das cr lf-Zeichen enthält (Details zu diesem Charakter). Dies bedeutet, dass diese Zeilen mit der Methode rstrip gestreift werden müssen.

In diesem Fall ist nur die check_id-Funktion relevant, daher teile ich nur die geänderte Funktion:

def check_id():
    with open('data.txt', 'r') as f:
        ad = 0
        for i in f:
            # The cr and lf characters should be removed from line. Please see the above reference for details.
            if i.rstrip() == "-------------------------":
                ad += 1
        return str(ad)


result = check_id()
print(result). # Result is 4

Das obige ist der detaillierte Inhalt vonPython-Schleifen funktionieren nicht mit readlines(). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen