Ulangi file untuk membaca baris:
with open('somefile') as openfileobject:
for line in openfileobject:
do_something()
Objek file iterable dan menghasilkan baris sampai EOF. Menggunakan objek file sebagai iterable menggunakan buffer untuk memastikan kinerja membaca.
Anda dapat melakukan hal yang sama dengan stdin (tidak perlu menggunakan raw_input()
:
import sys
for line in sys.stdin:
do_something()
Untuk melengkapi gambaran, pembacaan biner dapat dilakukan dengan:
from functools import partial
with open('somefile', 'rb') as openfileobject:
for chunk in iter(partial(openfileobject.read, 1024), b''):
do_something()
di mana chunk
akan berisi hingga 1024 byte sekaligus dari file, dan iterasi berhenti ketika openfileobject.read(1024)
mulai mengembalikan string byte kosong.
line
akan memiliki karakter baris baru di akhir.stdin
proses yang sedang berjalan ... jadi tidak pernah memiliki EOF sampai saya menghentikan prosesnya. Tapi kemudian saya mencapai "akhir sampai sekarang" dan saya menemui jalan buntu. Bagaimana cara mendeteksi ini dan bukan kebuntuan? Seperti jika tidak ada baris baru, berhenti membaca file (bahkan jika tidak ada EOF, yang dalam kasus saya tidak akan pernah ada).Anda bisa meniru idiom C dengan Python.
Untuk membaca buffer hingga
max_size
sejumlah byte, Anda dapat melakukan ini:Atau, file teks baris demi baris:
Anda perlu menggunakan
while True / break
konstruksi karena tidak ada pengujian eof dengan Python selain kurangnya byte yang dikembalikan dari pembacaan.Di C, Anda mungkin memiliki:
Namun, Anda tidak dapat menggunakan ini dengan Python:
karena tugas tidak diperbolehkan dalam ekspresi dengan Python (meskipun versi terbaru Python dapat meniru ini menggunakan ekspresi tugas, lihat di bawah).
Jelas lebih idiomatis dalam Python untuk melakukan ini:
Pembaruan: Sejak Python 3.8 Anda juga dapat menggunakan ekspresi tugas :
sumber
readline()
: Anda dapat melakukan penanganan kesalahan yang sangat detail, seperti menangkapUnicodeDecodeError
, yang tidak dapat Anda lakukan denganfor
iterasi idiomatik .Idiom Python untuk membuka file dan membacanya baris demi baris adalah:
File akan secara otomatis ditutup pada akhir kode di atas (
with
konstruksi menangani itu).Akhirnya, perlu dicatat bahwa
line
akan mempertahankan garis baru yang membuntuti. Ini dapat dengan mudah dihapus menggunakan:sumber
for line in f.readlines(): ...
, solusi yang biasanya disarankan.Anda dapat menggunakan potongan kode di bawah ini untuk membaca baris demi baris, hingga akhir file
sumber
Meskipun ada saran di atas untuk "melakukannya dengan cara python", jika seseorang ingin benar-benar memiliki logika berdasarkan EOF, maka saya kira menggunakan penanganan pengecualian adalah cara melakukannya -
Contoh:
Atau tekan Ctrl-Zsaat
raw_input()
diminta (Windows, Ctrl-ZLinux)sumber
Anda dapat menggunakan potongan kode berikut. readlines () membaca seluruh file sekaligus dan membaginya dengan baris.
sumber
Selain jawaban bagus @ dawg, solusi yang setara menggunakan operator walrus (Python> = 3.8):
sumber