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

Python-Schleifen funktionieren nicht mit readlines()

王林
Freigeben: 2024-02-06 09:54:04
nach vorne
648 Leute haben es durchsucht

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

Jetzt ist es eine TXT-Datei:

fugy
hello
hai
bebra

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

-------------------------
0  # This one
________________________
Nach dem Login kopieren

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}")
Nach dem Login kopieren

data.txt Inhalt:

test_1
-------------------------
test_2
-------------------------
test_3
-------------------------
test_4
Nach dem Login kopieren

Test:

> python3 test.py 
hi
test
test
test
test
test
test
test
result: 0
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage