Hướng dẫn how do i add eof in python? - làm cách nào để thêm eof trong python?

EOF bất ngờ có nghĩa là người đọc BCP đã tìm thấy EOF khi nó đang mong đợi nhiều dữ liệu hơn. EOF này có thể là:

(1) Kết thúc vật lý thực tế (không còn byte nữa). Điều này có nghĩa là bạn có dữ liệu định dạng sai. Kiểm tra gần cuối tệp của bạn để biết bản ghi không đầy đủ.

HOẶC

. Một điểm đánh dấu cuối tệp khi đọc từ bất kỳ tệp nào, không chỉ là thiết bị đầu cuối. Điều này bao gồm Python - Hành vi được xác định bởi C stdlib. Kiểm tra '\ x1a' trong dữ liệu của bạn.

Cập nhật phản hồi các bình luận một cách dễ đọc: responding to comments in a legible fashion:

Trong Notepad ++, bạn có thể làm cho nó hiển thị các ký tự bất thường bằng cách thực hiện chế độ xem / hiển thị ký hiệu / hiển thị tất cả các ký tự. Bạn có thể tìm kiếm bằng cách thực hiện Ctrl-F, gõ \ x1a vào hộp tìm kiếm và chọn nút radio mở rộng trong bảng tìm kiếm.

Hoặc bạn có thể với một chút Python có được số dòng của Ctrl-Z đầu tiên:

bytes = open('bcp.dat', 'rb').read() zpos = bytes.find('\x1a') # if zpos is -1, no Ctrl-Z in file print 1 + bytes[:zpos].count('\r\n')

Trường hợp .dat của bạn được tạo ra không quan trọng. Một CTRL-Z không chủ ý có thể xảy ra ở bất cứ đâu trong một tệp được tạo trên bất kỳ hệ điều hành nào. Đó là nơi nó đang được đọc dưới dạng tệp văn bản quan trọng - Windows? Bang!

xin chào

Tôi có thể viết EOF vào bộ mô tả tệp mà không cần đóng nó không? như: fd.write (EOF) hoặc một cái gì đó
like:
fd.write(EOF)
or something

GRT, Ruben
ruben

19 tháng 8 '06 #1

Trong, Cage đã viết:

Tôi có thể viết EOF vào bộ mô tả tệp mà không cần đóng nó không? như: fd.write (EOF) hoặc một cái gì đó
like:
fd.write(EOF)
or something

Bạn mong đợi điều này với điều gì? Viết một byte vào tệp và bạn không biết byte này có giá trị nào?
know which value this byte has?

Ciao, Marc 'Blackjack' Rintsch
Marc 'BlackJack' Rintsch

19 tháng 8 '06 #2

Vào ngày 2006-08-19, Cage

Tôi có thể viết EOF vào bộ mô tả tệp mà không cần đóng nó không?

Không. Không có trên Windows, OS-X hoặc Unix. Không có thứ gọi là "một EOF".
"an eof".

Trên CP/M Ctrl-Z được sử dụng làm EOF cho các tệp văn bản.

- Grant Edwards gr****@visi.com
Grant Edwards
gr****@visi.com

19 tháng 8 '06 #3

Marc 'Blackjack' Rintsch Schreef:

Trong, Cage đã viết:> Tôi có thể viết EOF vào bộ mô tả tệp mà không đóng nó không? Giống như: fd.write (EOF) hoặc một cái gì đó
>can i write a eof to a file descriptor without closing it?
like:
fd.write(EOF)
or something

Bạn mong đợi điều này với điều gì? Viết một byte vào tệp và bạn không biết byte này có giá trị nào?
know which value this byte has?

Ciao, Marc 'Blackjack' Rintsch
Marc 'BlackJack' Rintsch

19 tháng 8 '06 #2
I want to use a program that has a 'pipe' mode, in which you can use
stdin to send commands to the program. I found out that, when in pipe
mode and you are using the keyboard as input source you can do Ctrl-D to
'signal' the program that you have finished typing your command. The
program parses and then performs the command, and it doesn't quit. It
quits after 'Quit\n' + Ctrl-D
Now I want a python script to provide the input, how do i do that? I now
use popen to be able to write to the program's stdin (p_stdin)
I noticed that when i do a p_stdin.close() it acts as a 'ctrl-d' in that
the program recognizes the signal to process the command, but then I
cannot use p_stdin anymore to do p_stdin.write(...)

GRT, Ruben
ruben

19 tháng 8 '06 #1

Trong, Cage đã viết:

Tôi có thể viết EOF vào bộ mô tả tệp mà không cần đóng nó không? như: fd.write (EOF) hoặc một cái gì đó
No. Not on Windows, OS-X, or Unix. There is no such thing as
"an eof".

Bạn mong đợi điều này với điều gì? Viết một byte vào tệp và bạn không biết byte này có giá trị nào?

Ciao, Marc 'Blackjack' Rintsch

19 tháng 8 '06 #2
hello
^Z
c:\>

Vào ngày 2006-08-19, Cage
Unixish also uses the same.

Tôi có thể viết EOF vào bộ mô tả tệp mà không cần đóng nó không?
hello
^D
bash$

Không. Không có trên Windows, OS-X hoặc Unix. Không có thứ gọi là "một EOF".

Trên CP/M Ctrl-Z được sử dụng làm EOF cho các tệp văn bản.
closing the file) writing either of these ascii characters in
ascii/text mode (may vary between platforms?), but there are no
problems writing either of these characters in binary mode.

- Grant Edwards gr****@visi.com

19 tháng 8 '06 #3

Marc 'Blackjack' Rintsch Schreef:

Trong, Cage đã viết:> Tôi có thể viết EOF vào bộ mô tả tệp mà không đóng nó không? Giống như: fd.write (EOF) hoặc một cái gì đó
stdin to send commands to the program. I found out that, when in pipe
mode and you are using the keyboard as input source you can do Ctrl-D to
'signal' the program that you have finished typing your command. The
program parses and then performs the command, and it doesn't quit. It
quits after 'Quit\n' + Ctrl-D
Now I want a python script to provide the input, how do i do that? I now
use popen to be able to write to the program's stdin (p_stdin)
I noticed that when i do a p_stdin.close() it acts as a 'ctrl-d' in that
the program recognizes the signal to process the command, but then I
cannot use p_stdin anymore to do p_stdin.write(...)

Ciao, Marc 'Blackjack' Rintsch
Pexpect (//pexpect.sf.net/)

Ok, hãy để tôi giải thích điều này nhiều hơn một chút ... Tôi muốn sử dụng một chương trình có chế độ 'ống', trong đó bạn có thể sử dụng stdin để gửi các lệnh đến chương trình. Tôi phát hiện ra rằng, khi ở chế độ ống và bạn đang sử dụng bàn phím làm nguồn đầu vào, bạn có thể thực hiện CTRL-D để 'tín hiệu' chương trình mà bạn đã nhập lệnh hoàn tất. Chương trình phân tích cú pháp và sau đó thực hiện lệnh, và nó không thoát. Nó thoát sau khi 'thoát \ n' + ctrl-d bây giờ tôi muốn một tập lệnh python để cung cấp đầu vào, làm thế nào để tôi làm điều đó? Bây giờ tôi sử dụng popen để có thể ghi vào stdin (p_stdin) của chương trình, tôi nhận thấy rằng khi tôi thực hiện p_stdin.close (), nó hoạt động như một 'ctrl-d' trong đó chương trình nhận ra tín hiệu để xử lý lệnh, nhưng Sau đó, tôi không thể sử dụng p_stdin nữa để làm p_stdin.write (...)

19 tháng 8 '06 #4

Marc 'Blackjack' Rintsch Schreef:
Trong, Cage đã viết:> Tôi có thể viết EOF vào bộ mô tả tệp mà không đóng nó không? Giống như: fd.write (EOF) hoặc một cái gì đó
>>can i write a eof to a file descriptor without closing it?
like:
fd.write(EOF)
or something

Ciao, Marc 'Blackjack' Rintsch
know which value this byte has?

Ciao, Marc 'Blackjack' Rintsch
Marc 'BlackJack' Rintsch


Ok, hãy để tôi giải thích điều này nhiều hơn một chút ... Tôi muốn sử dụng một chương trình có chế độ 'ống', trong đó bạn có thể sử dụng stdin để gửi các lệnh đến chương trình. Tôi phát hiện ra rằng, khi ở chế độ ống và bạn đang sử dụng bàn phím làm nguồn đầu vào, bạn có thể thực hiện CTRL-D để 'tín hiệu' chương trình mà bạn đã nhập lệnh hoàn tất. Chương trình phân tích cú pháp và sau đó thực hiện lệnh, và nó không thoát. Nó thoát sau khi 'thoát \ n' + ctrl-d bây giờ tôi muốn một tập lệnh python để cung cấp đầu vào, làm thế nào để tôi làm điều đó? Bây giờ tôi sử dụng popen để có thể ghi vào stdin (p_stdin) của chương trình, tôi nhận thấy rằng khi tôi thực hiện p_stdin.close (), nó hoạt động như một 'ctrl-d' trong đó chương trình nhận ra tín hiệu để xử lý lệnh, nhưng Sau đó, tôi không thể sử dụng p_stdin nữa để làm p_stdin.write (...)
I want to use a program that has a 'pipe' mode, in which you can use
stdin to send commands to the program. I found out that, when in pipe
mode and you are using the keyboard as input source you can do Ctrl-D to
'signal' the program that you have finished typing your command. The
program parses and then performs the command, and it doesn't quit. It
quits after 'Quit\n' + Ctrl-D
Now I want a python script to provide the input, how do i do that? I now
use popen to be able to write to the program's stdin (p_stdin)
I noticed that when i do a p_stdin.close() it acts as a 'ctrl-d' in that
the program recognizes the signal to process the command, but then I
cannot use p_stdin anymore to do p_stdin.write(...)

Theo Wikipedia (phiên bản tiếng Đức, nhưng tôi cá là bạn cũng có thể nhận được thông tin đó bằng tiếng Anh) C -D gửi EOT - kết thúc truyền. Đó là ASCII 0x04.
using the english one, too) C-d sends EOT - end of transmission. Which
is ascii 0x04.

Vì vậy, tôi khuyên bạn nên thử viết

"\ x04"

đến đường ống. Có lẽ điều đó hoạt động.

Diez

19 tháng 8 '06 #7

Viết giá trị nhị phân cho ^d vào luồng sẽ không làm gì cả. Giá trị đó báo hiệu shell để đóng luồng, vì vậy nó chỉ có ý nghĩa khi bạn gõ một cái gì đó vào vỏ.
That value signals the shell to close the stream, as such it only has
significance when you're typing something into the shell.

Đối với OP: Viết một EOF vào một luồng mà không đóng nó không có ý nghĩa gì. EOF có nghĩa là-kết thúc tập tin. Khi chương trình đạt đến EOF, nó không thể đọc thêm bất kỳ giá trị nào từ luồng, vì vậy hãy mở nó để viết thêm nội dung vào nó thậm chí sẽ không hoạt động.
sense. EOF means just that--end of file. Once the program reaches an
EOF, it can't read any more values from the stream, so keeping it open
to write more stuff into it wouldn't even work.

19 tháng 8 '06 #8

Trên thực tế, không bao giờ. Có vẻ như nhận được một EOF từ một luồng cho biết khi nào nên dừng 'đọc', không nhất thiết là luồng được đóng. Thật là một hành vi kỳ lạ.
tells it when to stop 'reading', not necessarily that the stream is
closed. What a weird behavior.

19 tháng 8 '06 #9

Cage đã viết:

xin chào

Tôi có thể viết EOF vào bộ mô tả tệp mà không cần đóng nó không? như: fd.write (EOF) hoặc một cái gì đó
like:
fd.write(EOF)
or something

GRT, Ruben
ruben

Không nhưng dù sao cũng có một EOF cho tệp, ngay cả khi nó được mở.

Tôi nhớ lại theo MS-DOS, bạn có thể tạo một tệp có kích thước N mà không cần ghi vào nó (một số int21 hoặc 9? Gọi để sửa đổi chất béo) ... không còn thực sự khả thi nữa.
it (some INT21 or 9 ? call to modify the FAT) ... not really possible
anymore.

Philippe

19 tháng 8 '06 #10

Cage đã viết:

xin chào
stdin to send commands to the program. I found out that, when in pipe
mode and you are using the keyboard as input source you can do Ctrl-D to
'signal' the program that you have finished typing your command. The
program parses and then performs the command, and it doesn't quit. It
quits after 'Quit\n' + Ctrl-D

Tôi có thể viết EOF vào bộ mô tả tệp mà không cần đóng nó không? như: fd.write (EOF) hoặc một cái gì đó

GRT, Ruben

Không nhưng dù sao cũng có một EOF cho tệp, ngay cả khi nó được mở.

Tôi nhớ lại theo MS-DOS, bạn có thể tạo một tệp có kích thước N mà không cần ghi vào nó (một số int21 hoặc 9? Gọi để sửa đổi chất béo) ... không còn thực sự khả thi nữa.

Philippe

19 tháng 8 '06 #10
"an eof".

Tôi muốn sử dụng một chương trình có chế độ 'ống', trong đó bạn có thể sử dụng stdin để gửi các lệnh đến chương trình. Tôi phát hiện ra rằng, khi ở chế độ ống và bạn đang sử dụng bàn phím làm nguồn đầu vào, bạn có thể thực hiện CTRL-D để 'tín hiệu' chương trình mà bạn đã nhập lệnh hoàn tất. Chương trình phân tích cú pháp và sau đó thực hiện lệnh, và nó không thoát. Nó bỏ sau khi 'bỏ \ n' + ctrl-d


Bạn đã thử * Flushing * luồng đầu ra sau mỗi lệnh chưa?

C: \ sao chép Test.txt Xin chào ^Z C: \>
hello
^Z
c:\>

20 tháng 8 '06 #11
when text is being entered at the console.

Vào ngày 2006-08-19, Tim Chase
being Unixish also uses the same.

>> Tôi có thể viết EOF vào bộ mô tả tệp mà không cần đóng nó không?
hello
^D
bash$

Không. Không có trên Windows, OS-X hoặc Unix. Không có thứ gọi là "một EOF".
When it sees Ctrl-D as the first thing on a "line", it closes
the file descriptor causing the client to see an EOF. That
feature in the line-discipline layer can be disabled or
configured to use any other character.

Trên CP/M Ctrl-Z được sử dụng làm EOF cho các tệp văn bản.
then flush the stream.

Quy ước DOS/Window phổ biến cũng sử dụng Ctrl+Z (0x1a) cho EOF.
Grant Edwards grante Yow! I'm pretending that
at we're all watching PHIL
visi.com SILVERS instead of RICARDO
MONTALBAN!

C: \ sao chép Test.txt Xin chào ^Z C: \>

Iirc, ctrl-z không được sử dụng _in_files_ để đại diện cho EOF. Chỉ khi văn bản được nhập tại bảng điều khiển.
...

*Nix thường sử dụng Ctrl+D (0x04) làm tín hiệu EOF ... và OS-X được Unixish cũng sử dụng giống nhau.
when text is being entered at the console.

bash $ cat test.txt xin chào ^d bash $

Đó chỉ là lớp kỷ luật dòng tty của trình điều khiển TTY. Khi nó xem CTRL-D là điều đầu tiên trên một "dòng", nó sẽ đóng bộ mô tả tệp khiến máy khách thấy EOF. Tính năng đó trong lớp Dòng Discipline có thể được vô hiệu hóa hoặc cấu hình để sử dụng bất kỳ ký tự nào khác.
s='ba\r\n'+chr(26)+'bo\r\r'
open(n,'wb').write(s)
ss=open(n).read()
ss

Tôi nghi ngờ những gì OP thực sự cần làm là viết một dòng mới và sau đó xả luồng.

- Grant Edwards Grante Yow! Tôi đang giả vờ rằng tại tất cả chúng ta đều xem Phil Visi.com Silvers thay vì Ricardo Montalban!
'\x1a') does indeed represent "end of file" -- a convention going back
to CP/M (which lacked metadata to represent file length except in
multiples of 256 characters, if I recall correctly) and is still
followed by Windows (and by Python running on Windows).

21 tháng 8 '06 #12
/F and you, that a line-end and flush may be what he needs.
Alex

Cấp Edwards

Iirc, ctrl-z không được sử dụng _in_files_ để đại diện cho EOF. Chỉ khi văn bản được nhập tại bảng điều khiển.

Dễ dàng kiểm tra, nếu bạn có Windows:
when text is being entered at the console.

>> n = 'foo.txt's =' ba \ r \ n '+chr (26)+' bo \ r \ r'open (n, 'wb'). () ss
>>>n='foo.txt'
s='ba\r\n'+chr(26)+'bo\r\r'
open(n,'wb').write(s)
ss=open(n).read()
ss
'lệnh cấm'

Như bạn thấy, trong các tệp _Text_ trên Windows A Control-Z (char (26), hay còn gọi là '\ x1a') thực sự đại diện cho "kết thúc tệp"
'\x1a') does indeed represent "end of file"

Tuy nhiên, bài kiểm tra của bạn không khớp với ví dụ của OP, sử dụng Control-Z để tín hiệu kết thúc tệp khi đọc từ bảng điều khiển:
to signal end of file when reading from the console:

> Sao chép Test.txt

Xin chào ^Z 1 Tệp được sao chép.
^Z
1 file(s) copied.

Điều khiển-Z đó hoạt động theo cách tương tự như Control-D trên Unix và không có ký tự EOF nào được sao chép vào tệp:
character is copied to the file:

> python -c "in repr (open ('test.txt', 'rb'). read ())"

'Xin chào \ r \ n'

GRT, Ruben

21 tháng 8 '06 #14

Vào ngày 2006-08-21, Alex Martelli

Cấp Edwards
...
> Iirc, ctrl-z không được sử dụng _in_files_ để đại diện cho EOF. Chỉ có văn bản đang được nhập tại bảng điều khiển.
when text is being entered at the console.

Easy to test, if you have Windows:

Tôi có thể, nhưng tôi sẽ không thừa nhận nó ở nơi công cộng. :)

>>> n = 'foo.txt's =' ba \ r \ n '+chr (26)+' bo \ r \ r'open (n, 'wb'). Viết (s) ss = open (n). đọc () ss
s='ba\r\n'+chr(26)+'bo\r\r'
open(n,'wb').write(s)
ss=open(n).read()
ss
'lệnh cấm'

Như bạn thấy, trong các tệp _text_ trên windows a control-z (char (26), aka '\ x1a') thực sự đại diện cho "kết thúc tệp"-một quy ước quay trở lại CP/m (thiếu siêu dữ liệu để biểu diễn tệp Chiều dài ngoại trừ bội số của 256 ký tự, nếu tôi nhớ lại chính xác)
'\x1a') does indeed represent "end of file" -- a convention going back
to CP/M (which lacked metadata to represent file length except in
multiples of 256 characters, if I recall correctly)

Đúng rồi.

và vẫn được theo sau bởi Windows (và bởi Python chạy trên Windows).
Windows).

Rất thú vị. Tôi nghĩ rằng Windows đã từ bỏ điều đó. Tôi nhớ gặp sự cố trong DOS/Windows do trình soạn thảo văn bản cũ đặt Ctrl-Z ở cuối tệp-có lẽ là kết quả của các chương trình khác đọc tệp ở chế độ nhị phân và xem Ctrl-Z.
remember having problems under DOS/Windows caused by an old
text editor that put a ctrl-Z at the end of the file --
probably a result of the other programs reading the file in
binary mode and seeing the ctrl-Z.

Tuy nhiên, tôi nghi ngờ nó sẽ giúp áp phích ban đầu-tôi nghĩ, như /f và bạn, rằng một dòng kết thúc và tuôn ra có thể là những gì anh ta cần.
think, like /F and you, that a line-end and flush may be what
he needs.

- Grant Edwards Grante Yow! Tôi đã bầu chưa? tại Visi.com
Grant Edwards grante Yow! Am I elected yet?
at
visi.com

21 tháng 8 '06 #15

Chủ đề thảo luận này đã đóng

Câu trả lời đã bị vô hiệu hóa cho cuộc thảo luận này.

Làm thế nào để bạn viết EOF trong Python?

Hướng dẫn này giới thiệu các cách khác nhau để tìm hiểu xem một tệp có ở EOF của nó trong Python hay không ...
Sử dụng tệp.đọc () để tìm kết thúc của tập tin trong Python.....
Sử dụng phương thức readline () với vòng lặp thời gian để tìm kết thúc tệp trong python.Tập tin.....
Sử dụng toán tử Walrus để tìm kết thúc tệp trong Python ..

Làm cách nào để thêm ký tự vào EOF?

Nói chung, bạn có thể "kích hoạt EOF" trong một chương trình chạy trong một thiết bị đầu cuối có tổ hợp phím Ctrl + D ngay sau lần đầu vào cuối cùng.CTRL + D keystroke right after the last input flush.

Làm thế nào để bạn đánh dấu EOF?

Dấu EOF rất hữu ích trong việc truyền dữ liệu và lưu trữ.Các tệp được lưu trữ trong các khối và điểm đánh dấu cuối giúp máy tính biết rằng nó đã phân bổ đủ không gian để lưu trữ tệp.EOF thường được biểu thị bằng cách nhấn và giữ Ctrl và nhấn Z trong DOS và OS/2 hoặc nhấn và giữ CTRL và nhấn D trong Unix.pressing and holding Ctrl and pressing Z in DOS and OS/2 or pressing and holding Ctrl and pressing D in Unix.

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ệ.End Of File. Well, technically it is not an error, rather an exception.

Chủ đề