Chris, Thanks for your reply.
I hope the evidence below (taken from IDLE) clarifies my issue: Stephen. ====================== 1. Create BOM.txt ----------------- >>> myfil = open ("BOM.txt", "wb") >>> myfil.write ("\xef" + "\xbb" + "\xbf") >>> myfil.close() 2. Input three bytes at once from BOM.txt and print them -------------------------------------------------------- >>> myfil = open ("BOM.txt", "rb") >>> myBOM = myfil.read (3) >>> myBOM '\xef\xbb\xbf' >>> myfil.close() 3. Input three bytes one at a time from BOM.txt and print them -------------------------------------------------------------- >>> myfil = open ("BOM.txt", "rb") >>> myBOM_1 = myfil.read (1) >>> myBOM_2 = myfil.read (1) >>> myBOM_3 = myfil.read (1) >>> myBOM_1 '\xef' >>> myBOM_2 '\xbb' >>> myBOM_3 '\xbf' >>> myfil.close() 4. Input three bytes at once from BOM.txt and print them -------------------------------------------------------- >>> import codecs >>> myfil = codecs.open ("BOM.txt", mode="rb", encoding="UTF-8") >>> myBOM = unicode (myfil.read (3)) >>> myBOM u'\ufeff' >>> myfil.close () 5. Attempt to input three bytes one at a time from BOM.txt and print them ------------------------------------------------------------------------- >>> myfil = codecs.open ("BOM.txt", mode="rb", encoding="UTF-8") >>> myBOM_4 = myfil.read (1) >>> myBOM_5 = myfil.read (1) >>> myBOM_6 = myfil.read (1) >>> myBOM_4 u'\ufeff' >>> myBOM_5 u'' >>> myBOM_6 u'' >>> myfil.close() Notes A. The attempt at Part 5 actually inputs all three bytes when we ask it to input just the first one! B. The outcome from Part 5 shows that, actually, the request to input text in Part 4 brought about a response from the program something like this: Input the UTF-8-encoded character as the first "byte"; As expected, after reaching the end of the file, continue supplying an empty string for each of the requested extra bytes. ====================== On Wed, Jan 11, 2023 at 11:00 AM Chris Angelico <ros...@gmail.com> wrote: > On Wed, 11 Jan 2023 at 21:31, Stephen Tucker <stephen_tuc...@sil.org> > wrote: > > > > Chris - > > > > In the Python 2.7.10 documentation, I am referring to section 5. > Built-in Types, subsection 5.9 File Objects. > > > > In that subsection, I have the following paragraph: > > > > file.read([size]) > > > > Read at most size bytes from the file (less if the read hits EOF before > obtaining size bytes). If the size argument is negative or omitted, read > all data until EOF is reached. The bytes are returned as a string object. > An empty string is returned when EOF is encountered immediately. (For > certain files, like ttys, it makes sense to continue reading after an EOF > is hit.) Note that this method may call the underlying C function fread() > more than once in an effort to acquire as close to size bytes as possible. > Also note that when in non-blocking mode, less data than was requested may > be returned, even if no size parameter was given. > > > > Yes, so it should be that number of bytes, which is what it does, isn't it? > > ChrisA > -- > https://mail.python.org/mailman/listinfo/python-list > -- https://mail.python.org/mailman/listinfo/python-list