Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Mengulangi Fail Python Dua Kali Menghasilkan Keputusan yang Tidak Dijangka?

Mengapa Mengulangi Fail Python Dua Kali Menghasilkan Keputusan yang Tidak Dijangka?

Patricia Arquette
Patricia Arquetteasal
2024-12-06 04:19:09748semak imbas

Why Does Iterating Over a Python File Twice Produce Unexpected Results?

Lelaran Pada Fail Dua Kali: Memahami Mekanisme Lelaran Fail Python

Dalam Python, lelaran pada fail melibatkan membaca baris demi baris menggunakan gelung membina. Walau bagaimanapun, percubaan untuk melelaran pada fail yang sama untuk kali kedua selalunya menghasilkan hasil yang tidak dijangka: tiada output.

Tingkah laku ini disebabkan oleh mekanisme lelaran fail asas dalam Python. Apabila anda melaksanakan gelung pertama:

for line in f.readlines():
    print(line)

fail dibaca hingga hujungnya. Ini adalah sama seperti membaca pemain pita ke hujung pita. Apabila penghujungnya dicapai, tiada lagi data untuk dibaca.

Untuk mengulang semula fail, anda mesti menetapkan semula penuding fail ke permulaan. Ini boleh dicapai dalam dua cara:

1. Menggunakan f.seek(0):

f.seek(0)
for line in f.readlines():
    print(line)

Memanggil f.seek(0) letakkan semula penuding fail ke permulaan fail, membolehkan anda membacanya semula.

2. Menutup dan Membuka Semula Fail:

f.close()
f = open('baby1990.html', 'rU')
for line in f.readlines():
    print(line)

Menutup dan membuka semula fail secara automatik menetapkan semula penuding fail ke permulaan.

Alternatif: Menggunakan dengan Sekat:

Pernyataan dengan menyediakan cara yang lebih mudah dan selamat untuk digunakan fail:

with open('baby1990.html', 'rU') as f:
    for line in f:
        print(line)

Dalam blok dengan, fail ditutup secara automatik apabila blok itu keluar, tanpa mengira pengecualian atau gelung. Ini menghapuskan keperluan untuk pengendalian fail manual.

Atas ialah kandungan terperinci Mengapa Mengulangi Fail Python Dua Kali Menghasilkan Keputusan yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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