Maison >développement back-end >Tutoriel Python >Les boucles Python ne fonctionnent pas avec readlines()

Les boucles Python ne fonctionnent pas avec readlines()

王林
王林avant
2024-02-06 09:54:04634parcourir

Python 循环不适用于 readlines()

Contenu de la question

Il faudrait compter le nombre de lignes "------------------------" mais ça ne marche pas non plus Vous peut utiliser print("test") qui ne sera pas affiché dans la console, il renverra toujours 0. Mais par exemple la ligne print("hi") fonctionne. Le programme ne voit tout simplement pas ma boucle et je ne sais pas pourquoi. :(

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)

Si j'ai besoin d'envoyer le code complet pour résoudre le problème, veuillez demander

J'ai changé le mode "a+" en "r" pour qu'il lit correctement les lignes, et c'est le cas, mais je n'arrive toujours pas à vérifier le tableau pour obtenir le nombre de lignes. Si vous avez des suppositions ou des solutions, veuillez les noter.

EDIT : Voici le code complet de mon data.py et le texte dans le fichier 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)

Maintenant, c'est un fichier txt :

fugy
hello
hai
bebra

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

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

J'essaie de créer un cahier pour pouvoir écrire des notes et les lire. Supprimer la fonction, je le ferai plus tard. L'idée est d'agrandir ce zéro à chaque fois que vous ajoutez une annotation.


Bonne réponse


Je pense que le problème est que votre data.txt 文件(可能是空的,因为您提到 "test" 在控制台中不可见,这意味着该脚本不在 for 循环中运行,在其他word: lines itérateur est de longueur nulle).

J'ai écrit un code fonctionnel, vous pouvez voir le code et le fichier de test avec la sortie du script ci-dessous.

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 contenu :

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

Test :

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

Éditeur :

op a partagé le code source complet et utilisé data.txt,其中包含cr lf字符(有关该字符的详细信息)。这意味着必须使用 rstrip, qui contient des caractères cr lf (Détails sur ce personnage). Cela signifie que ces lignes doivent être entrelacées à l'aide de la méthode rstrip.

Dans ce cas, seule la fonction check_id est pertinente, je partage donc uniquement la fonction modifiée :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer