Hướng dẫn what is end of file condition in python? - điều kiện cuối tệp trong python là gì?

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

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

348K73 Huy hiệu vàng726 Huy hiệu bạc824 Huy hiệu Đồng73 gold badges726 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.23410 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

474K105 Huy hiệu vàng930 Huy hiệu bạc1002 Huy hiệu Đồng105 gold badges930 silver badges1002 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

9.01412 Huy hiệu vàng26 Huy hiệu bạc39 Huy hiệu đồng12 gold badges26 silver badges39 bronze badges

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

tingtongtingtongtingtong

2652 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.4K11 Huy hiệu vàng56 Huy hiệu bạc70 Huy hiệu Đồng11 gold badges56 silver badges70 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

348K73 Huy hiệu vàng726 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.23410 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

474K105 Huy hiệu vàng930 Huy hiệu bạc1002 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

9.01412 Huy hiệu vàng26 Huy hiệu bạc39 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

2652 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.4K11 Huy hiệu vàng56 Huy hiệu bạc70 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

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.24716 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

6993 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 sau13 gold badges225 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

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.53413 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

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

Huy hiệu vàng 11K755 Huy hiệu bạc66 Huy hiệu đồng7 gold badges55 silver badges66 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

Blairg23Blairg23Blairg23

10,6K6 Huy hiệu vàng71 Huy hiệu bạc70 Huy hiệu đồng6 gold badges71 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

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

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

11.1k5 Huy hiệu vàng53 Huy hiệu bạc93 Huy hiệu Đồng5 gold badges53 silver badges93 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

Kết thúc ký tự tệp là gì?

Theo mặc định, ký tự EOF, trình điều khiển chuyển đổi ký tự điều khiển-D khi bắt đầu một dòng thành một chỉ báo cuối tập tin.Để chèn ký tự điều khiển thực tế [ASCII 04] vào luồng đầu vào, người dùng đi trước nó với ký tự lệnh "trích dẫn" [thường là Control-V].the driver converts a Control-D character at the start of a line into an end-of-file indicator. To insert an actual Control-D [ASCII 04] character into the input stream, the user precedes it with a "quote" command character [usually Control-V].

Làm thế nào để tôi biết nếu tôi đã kết thúc tập tin trong Python?

Bạn có thể so sánh giá trị trả về của fp.tell [] trước và sau khi gọi phương thức đọc.Nếu họ trả về cùng một giá trị, FP sẽ ở EOF.compare the returned value of fp. tell[] before and after calling the read method. If they return the same value, fp is at eof.

Readline return trở lại ở cuối tệp python?

Phương thức Readline đọc một dòng từ tệp và trả về nó dưới dạng chuỗi.Chuỗi được trả về bởi Readline sẽ chứa ký tự mới ở cuối.Phương thức này trả về chuỗi trống khi nó đến cuối tệp.the empty string when it reaches the end of the file.

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

Nhân vật dòng mới trong Python là \ n.Nó được sử dụng để chỉ ra sự kết thúc của một dòng văn bản.\n . It is used to indicate the end of a line of text.

Bài Viết Liên Quan

Chủ Đề