Sử dụng EOF trong python?

Chào các bạn mình học python cũng đã khá lâu
Nhưng mình chỉ mới học về tệp trong python được một vài ngày thôi
Mình đang viết một chương trình mà xét nếu chưa kết thúc file thì thực hiện một số câu lệnh
Mình biết với phần này thì phải dùng EOF nhưng mà mình lại không biết dùng EOF trong python
Có bạn nào biết chỉ mình với

Dấu hiệu của end-of-file trong Python là khi các method đọc file trả về chuỗi rỗng. Hoặc bạn cũng có thể check xem là vị trí con trỏ file có đang nằm ở cuối file hay không bằng cách dùng biểu thức:

import os
f = open('test.txt', 'r')
if f.tell() == os.fstat(f.fileno()).st_size:
   # vị trí con trỏ file bằng với file size => đã nằm ở cuối file
   pass

Hoặc đơn giản, dễ hiểu hơn là bạn cứ đọc hết file vào trong 1 biến rồi xử lý (method read khi không có tham số).

Tham khảo stackoverflow.com

2 Likes

Cám on bạn mình cũng đã thử một vài mã khác nhưng mà cuối cùng cũng xong
Mình làm theo cái cách sau của bạn nhưng mà mình làm hơi khác tí

from sys import argv

script, filename = argv

print “Open File !!!”
target = open(filename, ‘r’)

while True:
line = target.readline()
if not line:
break
print line
target.close()

Cám ơn bạn nhiều :grinning:

1 Like

Haha, mình không có ý bắt bẻ nhưng if not line tức là đang kiểm tra line có trả về chuỗi rỗng hay không đó.

1 Like

Sự thật là mình cũng thử rất nhiều cách khác nhưng mà mình thấy nó hơi khó
Mình thấy python lúc sử dụng EOF khó hơn C hay PASCAL ngày trước mình có học
Lúc trước mình dùng PASCAL thời còn lớp 11, lớp 8 í
Mình chỉ cần nhập là if not EOF(target_file) thì phải
Giờ mình tính làm một cái phần mềm hướng đối tượng “Từ danh sách khách hàng bên ngoài lấy ra các thông số cần thiết để in ra màn hình” nhưng mà mình vẫn đang kẹt lại cái EOF này hic.

1 Like

Đúng là mình cũng thấy khó hiểu, trong C có hàm feof() là kiểm tra được dễ dàng mà trong Python nó lại quy ước kiểu như vậy. Thôi bạn cứ load hết vào 1 biến rồi xử lý, dù sao xử lý trên bộ nhớ cũng nhanh hơn là xử lý có thêm ổ cứng.

2 Likes

Dễ lắm bạn à

import sys
sys.stdin = open('input.txt', 'r')
while True:
    try: v = input()    # lấy giá trị
    except: break       # nếu như có lỗi ở dòng trên
                        # thì đó là EOF và kết thúc
                        # vòng lặp while True
1 Like

Cũng 5 năm rồi, có thể giờ ngta thành master rồi.
PS: ghi đè stdin để đọc file là 1 điều không nên làm vì có thể sinh ra side effect

5 Likes

à mình thêm stdin để làm vd EOF thôi mà

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?