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

Les boucles Python ne fonctionnent pas avec readlines()

王林
Libérer: 2024-02-06 09:54:04
avant
624 Les gens l'ont consulté

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)
Copier après la connexion

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)
Copier après la connexion

Maintenant, c'est un fichier txt :

fugy
hello
hai
bebra

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

-------------------------
0  # This one
________________________
Copier après la connexion

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}")
Copier après la connexion

data.txt contenu :

test_1
-------------------------
test_2
-------------------------
test_3
-------------------------
test_4
Copier après la connexion

Test :

> python3 test.py 
hi
test
test
test
test
test
test
test
result: 0
Copier après la connexion

É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
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal