Gelung Python tidak berfungsi dengan readlines()

王林
Lepaskan: 2024-02-06 09:54:04
ke hadapan
581 orang telah melayarinya

Python 循环不适用于 readlines()

Kandungan soalan

Ia sepatutnya mengira bilangan baris "------------------------" tetapi ia juga tidak berkesan Anda boleh menggunakan print("ujian") yang tidak akan dipaparkan dalam konsol, ia akan sentiasa mengembalikan 0. Tetapi sebagai contoh cetakan baris("hai") berfungsi. Program ini tidak melihat gelung saya dan saya tidak tahu mengapa. :(

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)
Salin selepas log masuk

Jika saya perlu menghantar kod lengkap untuk menyelesaikan masalah, sila tanya

Saya menukar mod "a+" kepada "r" supaya ia membaca baris dengan betul, dan ia betul, tetapi saya masih tidak dapat menyemak tatasusunan untuk mendapatkan bilangan baris. Jika anda mempunyai sebarang tekaan atau penyelesaian, sila tuliskannya.

EDIT: Berikut ialah kod lengkap untuk data.py saya dan teks dalam fail 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)
Salin selepas log masuk

Kini ia adalah fail txt:

fugy
hello
hai
bebra

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

-------------------------
0  # This one
________________________
Salin selepas log masuk

Saya cuba membuat buku nota supaya saya boleh menulis nota dan membacanya. Padam func saya akan buat nanti. Ideanya adalah untuk menjadikan sifar ini lebih besar setiap kali anda menambah anotasi.


Jawapan betul


Saya rasa masalahnya ialah data.txt 文件(可能是空的,因为您提到 "test" 在控制台中不可见,这意味着该脚本不在 for 循环中运行,在其他word: lines anda lelaran adalah panjang sifar).

Saya telah menulis kod yang berfungsi, anda boleh melihat kod dan fail ujian dengan output skrip di bawah.

Kod:

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}")
Salin selepas log masuk

data.txt kandungan:

test_1
-------------------------
test_2
-------------------------
test_3
-------------------------
test_4
Salin selepas log masuk

Ujian:

> python3 test.py 
hi
test
test
test
test
test
test
test
result: 0
Salin selepas log masuk

Editor:

op berkongsi kod sumber lengkap dan menggunakan data.txt,其中包含cr lf字符(有关该字符的详细信息)。这意味着必须使用 rstrip, yang mengandungi aksara cr lf (Butiran tentang watak ini). Ini bermakna garisan ini mesti dijalurkan menggunakan kaedah rstrip.

Dalam kes ini, hanya fungsi check_id yang relevan, jadi saya hanya berkongsi fungsi yang diubah suai:

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
Salin selepas log masuk

Atas ialah kandungan terperinci Gelung Python tidak berfungsi dengan readlines(). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!