Hướng dẫn where is eof in python? - eof ở đâu trong python?

fp = open("a.txt")
#do many things with fp

c = fp.read()
if c is None:
    print 'fp is at the eof'

Bên cạnh phương pháp trên, bất kỳ cách nào khác để tìm hiểu xem FP có ở EOF không?

Hỏi ngày 13 tháng 4 năm 2012 lúc 11:52Apr 13, 2012 at 11:52

Hướng dẫn where is eof in python? - eof ở đâu trong python?

1

for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
3 đọc đến cuối tệp, vì vậy sau khi hoàn thành thành công, bạn biết tệp đang ở EOF; Không cần phải kiểm tra. Nếu nó không thể đạt được EOF, nó sẽ tăng một ngoại lệ.

Khi đọc một tệp trong các đoạn thay vì với

for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
4, bạn sẽ biết rằng bạn đã nhấn EOF khi
for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
5 trả về ít hơn số byte bạn yêu cầu. Trong trường hợp đó, cuộc gọi
for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
5 sau đây sẽ trả về chuỗi trống (không phải
for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
7). Vòng lặp sau đây đọc một tệp trong các khối; Nó sẽ gọi
for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
5 nhiều nhất là quá nhiều.

assert n > 0
while True:
    chunk = fp.read(n)
    if chunk == '':
        break
    process(chunk)

Hoặc, ngắn hơn:

for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)

Đã trả lời ngày 13 tháng 4 năm 2012 lúc 11:55Apr 13, 2012 at 11:55

Fred Foofred FooFred Foo

347K73 Huy hiệu vàng725 Huy hiệu bạc824 Huy hiệu đồng73 gold badges725 silver badges824 bronze badges

9

Thiết kế "For-Else" thường bị bỏ qua. Xem: Tài liệu Python "luồng điều khiển trong vòng lặp":

Thí dụ

with open('foobar.file', 'rb') as f:
    for line in f:
        foo()

    else:
        # No more lines to be read from file
        bar()

BigMan73

1.04413 Huy hiệu bạc13 Huy hiệu đồng13 silver badges13 bronze badges

Đã trả lời ngày 14 tháng 7 năm 2014 lúc 14:18Jul 14, 2014 at 14:18

BEEPBOOPBEEPBOOPBeepBoop

1.22410 Huy hiệu bạc12 Huy hiệu đồng10 silver badges12 bronze badges

2

Tôi lập luận rằng đọc từ tệp là cách đáng tin cậy nhất để xác định xem nó có chứa nhiều dữ liệu hơn hay không. Nó có thể là một đường ống, hoặc một quy trình khác có thể được nối lại dữ liệu vào tệp, v.v.

Nếu bạn biết đó không phải là một vấn đề, bạn có thể sử dụng một cái gì đó như:

f.tell() == os.fstat(f.fileno()).st_size

Đã trả lời ngày 13 tháng 4 năm 2012 lúc 11:54Apr 13, 2012 at 11:54

NPENPENPE

472K104 Huy hiệu vàng923 Huy hiệu bạc998 Huy hiệu Đồng104 gold badges923 silver badges998 bronze badges

3

Khi Python trả về chuỗi trống trên EOF chứ không phải "EOF", bạn chỉ có thể kiểm tra mã cho nó, được viết ở đây

f1 = open("sample.txt")

while True:
    line = f1.readline()
    print line
    if ("" == line):
        print "file finished"
        break;

Joanis

8.34112 Huy hiệu vàng26 Huy hiệu bạc36 Huy hiệu đồng12 gold badges26 silver badges36 bronze badges

Đã trả lời ngày 16 tháng 6 năm 2016 lúc 9:51Jun 16, 2016 at 9:51

tingtongtingtongtingtong

2552 huy hiệu bạc2 huy hiệu đồng2 silver badges2 bronze badges

5

Khi thực hiện I/O nhị phân, phương pháp sau là hữu ích:

while f.read(1):
    f.seek(-1,1)
    # whatever

Ưu điểm là đôi khi bạn đang xử lý một luồng nhị phân và không biết trước bạn sẽ cần đọc bao nhiêu.

Đã trả lời ngày 1 tháng 8 năm 2014 lúc 1:39Aug 1, 2014 at 1:39

user545424user545424user545424

15.3k11 Huy hiệu vàng53 Huy hiệu bạc69 Huy hiệu Đồng11 gold badges53 silver badges69 bronze badges

11

Bạn có thể so sánh giá trị trả về của

for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
9 trước và sau khi gọi phương thức
for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
5. Nếu họ trả về cùng một giá trị, FP sẽ ở EOF.

Hơn nữa, tôi không nghĩ rằng mã ví dụ của bạn thực sự hoạt động. Phương pháp

for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
5 theo kiến ​​thức của tôi không bao giờ trả về
for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
7, nhưng nó trả về một chuỗi trống trên EOF.

Đã trả lời ngày 13 tháng 4 năm 2012 lúc 11:54Apr 13, 2012 at 11:54

1

NPENPE

Đã trả lời ngày 13 tháng 4 năm 2012 lúc 11:55Apr 13, 2012 at 11:55

011001100110011001100110

Fred Foofred Foo3 gold badges22 silver badges32 bronze badges

f=open(file_name)
for line in f:
   print line

Hướng dẫn where is eof in python? - eof ở đâu trong python?

347K73 Huy hiệu vàng725 Huy hiệu bạc824 Huy hiệu đồng

Thiết kế "For-Else" thường bị bỏ qua. Xem: Tài liệu Python "luồng điều khiển trong vòng lặp":16 gold badges45 silver badges49 bronze badges

Thí dụDec 9, 2014 at 7:08

1.04413 Huy hiệu bạc13 Huy hiệu đồngsamba

Đã trả lời ngày 14 tháng 7 năm 2014 lúc 14:183 gold badges10 silver badges19 bronze badges

2

BEEPBOOPBEEPBOOP

f.tell() == os.fstat(f.fileno()).st_size

1.22410 Huy hiệu bạc12 Huy hiệu đồng

Tôi lập luận rằng đọc từ tệp là cách đáng tin cậy nhất để xác định xem nó có chứa nhiều dữ liệu hơn hay không. Nó có thể là một đường ống, hoặc một quy trình khác có thể được nối lại dữ liệu vào tệp, v.v.

while not EOF(f):
     line = f.readline()
     " do something with line"

Nếu bạn biết đó không phải là một vấn đề, bạn có thể sử dụng một cái gì đó như:

assert n > 0
while True:
    chunk = fp.read(n)
    if chunk == '':
        break
    process(chunk)
0

Đã trả lời ngày 13 tháng 4 năm 2012 lúc 11:54

NPENPEFeb 8, 2018 at 7:20

Hướng dẫn where is eof in python? - eof ở đâu trong python?

472K104 Huy hiệu vàng923 Huy hiệu bạc998 Huy hiệu ĐồngHan Luo

Khi Python trả về chuỗi trống trên EOF chứ không phải "EOF", bạn chỉ có thể kiểm tra mã cho nó, được viết ở đây3 silver badges4 bronze badges

Joanis

8.34112 Huy hiệu vàng26 Huy hiệu bạc36 Huy hiệu đồng

Đã trả lời ngày 16 tháng 6 năm 2016 lúc 9:51Sep 10, 2013 at 4:37

tingtongtingtongymattw

2552 huy hiệu bạc2 huy hiệu đồng10 silver badges7 bronze badges

Khi thực hiện I/O nhị phân, phương pháp sau là hữu ích:

Đã trả lời ngày 13 tháng 4 năm 2012 lúc 11:55Apr 13, 2012 at 11:55

Ưu điểm là đôi khi bạn đang xử lý một luồng nhị phân và không biết trước bạn sẽ cần đọc bao nhiêu.mensi

Đã trả lời ngày 1 tháng 8 năm 2014 lúc 1:392 gold badges33 silver badges43 bronze badges

assert n > 0
while True:
    chunk = fp.read(n)
    if chunk == '':
        break
    process(chunk)
1

15.3k11 Huy hiệu vàng53 Huy hiệu bạc69 Huy hiệu Đồngseek() and tell() to determine the position of the end of file. Once the position is found, seek back to the file beginning

Bạn có thể so sánh giá trị trả về của

for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
9 trước và sau khi gọi phương thức
for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
5. Nếu họ trả về cùng một giá trị, FP sẽ ở EOF.Jul 31, 2017 at 8:57

Hướng dẫn where is eof in python? - eof ở đâu trong python?

1

Hơn nữa, tôi không nghĩ rằng mã ví dụ của bạn thực sự hoạt động. Phương pháp

for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
5 theo kiến ​​thức của tôi không bao giờ trả về
for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
7, nhưng nó trả về một chuỗi trống trên EOF.

Đọc trả về một chuỗi trống khi gặp EOF. Tài liệu đang ở đây.

2.2363 huy hiệu vàng22 Huy hiệu bạc32 Huy hiệu đồng

assert n > 0
while True:
    chunk = fp.read(n)
    if chunk == '':
        break
    process(chunk)
2

Northcat

assert n > 0
while True:
    chunk = fp.read(n)
    if chunk == '':
        break
    process(chunk)
3

9.17716 Huy hiệu vàng45 Huy hiệu bạc49 Huy hiệu đồng

assert n > 0
while True:
    chunk = fp.read(n)
    if chunk == '':
        break
    process(chunk)
4

Đã trả lời ngày 9 tháng 12 năm 2014 lúc 7:08

SambasambaMay 1, 2019 at 0:47

Hướng dẫn where is eof in python? - eof ở đâu trong python?

6793 Huy hiệu vàng10 Huy hiệu bạc19 Huy hiệu đồngShital Shah

Tôi thực sự không hiểu tại sao Python vẫn không có chức năng như vậy. Tôi cũng không đồng ý sử dụng những điều sau12 gold badges224 silver badges180 bronze badges

1

Lý do chính là

with open('foobar.file', 'rb') as f:
    for line in f:
        foo()

    else:
        # No more lines to be read from file
        bar()
3 không có khả năng hoạt động trong một số điều kiện đặc biệt.

assert n > 0
while True:
    chunk = fp.read(n)
    if chunk == '':
        break
    process(chunk)
5

Hướng dẫn where is eof in python? - eof ở đâu trong python?

Phương pháp này làm việc cho tôi giống như sau đây. Nếu bạn có một số mã giả như sau

Bạn có thể thay thế nó bằng:1 gold badge14 silver badges25 bronze badges

Phương pháp này rất đơn giản và bạn không cần phải thay đổi hầu hết các mã của bạn.Jan 27, 2018 at 21:47

Đã trả lời ngày 8 tháng 2 năm 2018 lúc 7:20wamba

Han Luohan Luo1 bronze badge

1

Đọc một tệp theo lô của các dòng

f.tell() == os.fstat(f.fileno()).st_size
0 (lô cuối cùng có thể ngắn hơn):

assert n > 0
while True:
    chunk = fp.read(n)
    if chunk == '':
        break
    process(chunk)
6

Đã trả lời ngày 25 tháng 2 năm 2018 lúc 22:33Feb 25, 2018 at 22:33

boechat107boechat107boechat107

1.52413 Huy hiệu bạc23 Huy hiệu đồng13 silver badges23 bronze badges

1

Nhận vị trí EOF của tệp:

assert n > 0
while True:
    chunk = fp.read(n)
    if chunk == '':
        break
    process(chunk)
7

và so sánh nó với vị trí hiện tại:

f.tell() == os.fstat(f.fileno()).st_size
1.

Đã trả lời ngày 22 tháng 7 năm 2018 lúc 19:11Jul 22, 2018 at 19:11

Hướng dẫn where is eof in python? - eof ở đâu trong python?

К с соКонстантин Ван

10,8K7 Huy hiệu vàng54 Huy hiệu bạc65 Huy hiệu Đồng7 gold badges54 silver badges65 bronze badges

Mặc dù cá nhân tôi sẽ sử dụng câu lệnh

f.tell() == os.fstat(f.fileno()).st_size
2 để xử lý việc mở và đóng tệp, trong trường hợp bạn phải đọc từ Stdin và cần theo dõi ngoại lệ EOF, hãy làm điều gì đó như thế này:

Sử dụng thử-bắt với

f.tell() == os.fstat(f.fileno()).st_size
3 làm ngoại lệ:

assert n > 0
while True:
    chunk = fp.read(n)
    if chunk == '':
        break
    process(chunk)
8

Đã trả lời ngày 12 tháng 1 năm 2016 lúc 4:19Jan 12, 2016 at 4:19

Hướng dẫn where is eof in python? - eof ở đâu trong python?

Blairg23Blairg23Blairg23

10,5K6 Huy hiệu vàng70 Huy hiệu bạc70 Huy hiệu đồng6 gold badges70 silver badges70 bronze badges

Tôi sử dụng chức năng này:

assert n > 0
while True:
    chunk = fp.read(n)
    if chunk == '':
        break
    process(chunk)
9

Đã trả lời ngày 31 tháng 7 năm 2016 lúc 22:39Jul 31, 2016 at 22:39

1

Mã này sẽ hoạt động cho Python 3 trở lên

for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
0

Đã trả lời ngày 4 tháng 8 năm 2020 lúc 6:17Aug 4, 2020 at 6:17

Hướng dẫn where is eof in python? - eof ở đâu trong python?

Bạn có thể thử mã này:

for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
1

Đã trả lời ngày 8 tháng 1 lúc 1:44Jan 8 at 1:44

Hướng dẫn where is eof in python? - eof ở đâu trong python?

1

Bạn có thể sử dụng đoạn mã bên dưới để đọc từng dòng, cho đến khi kết thúc tệp:

for chunk in iter(lambda: fp.read(n), ''):
    process(chunk)
2

Lắp ráp

Huy hiệu vàng 11K553 Huy hiệu bạc92 Huy hiệu đồng5 gold badges53 silver badges92 bronze badges

Đã trả lời ngày 27 tháng 10 năm 2014 lúc 12:11Oct 27, 2014 at 12:11

A ra rA R

2.5773 huy hiệu vàng19 Huy hiệu bạc37 Huy hiệu đồng3 gold badges19 silver badges37 bronze badges

Làm thế nào để bạn tìm thấy EOF của một dòng trong Python?

Sử dụng tệp ...
open_file = open ("file.txt", "r").
Text = Open_File.đọc().
EOF = Open_File.đọc().
print(text).
print(eof).

Có EOF trong Python không?

EOF là viết tắt của kết thúc tập tin trong Python.EOF bất ngờ ngụ ý rằng trình thông dịch đã kết thúc chương trình của chúng tôi trước khi thực hiện tất cả các mã.Lỗi này có thể xảy ra khi: Chúng tôi không khai báo một câu lệnh cho Loop (while / for). Unexpected EOF implies that the interpreter has reached the end of our program before executing all the code. This error is likely to occur when: we fail to declare a statement for loop ( while / for )

Nhân vật EOF trong Python là gì?

EOF là viết tắt của kết thúc tập tin.Vâng, về mặt kỹ thuật, nó không phải là một lỗi, thay vào đó là một ngoại lệ.Ngoại lệ này được nêu ra khi một trong các hàm tích hợp, thường là đầu vào () trả về phần cuối (EOF) mà không cần đọc bất kỳ dữ liệu nào.End Of File. Well, technically it is not an error, rather an exception. This exception is raised when one of the built-in functions, most commonly input() returns End-Of-File (EOF) without reading any data.

Làm cách nào để thêm EOF trong Python?

f = mở ("myfile.txt", "r").
Trong khi đúng:.
dòng = f.ĐỌC LINE ().
Nếu không dòng:.
In ("EOF đạt được").
break..
print(line).