file.readlines() - gives me error (bad file descriptor)

W

wordsender

Hey guys,

I can't figure this one out, why is this simple script giving me
problems?

logfile=file(r'test.txt','w')
logfile.write('datetime')
test=logfile.readlines()

When I run it I get the error message:
Traceback (most recent call last):
File "C:\Documents and Settings\Gregory\My Documents\Get New Great
Job\testfile.py", line 3, in ?
test=logfile.readlines()
IOError: [Errno 9] Bad file descriptor

I'm running Windows XP, Python 2.3.3 (#51, Dec 18 2003, 20:22:39) [MSC
v.1200 32 bit (Intel)] on win32
Any help would be greatly appricated.

Thanks,

Greg
 
A

Aldo Cortesi

Thus spake (e-mail address removed) ([email protected]):
Hey guys,

I can't figure this one out, why is this simple script giving me
problems?

logfile=file(r'test.txt','w')
^^^

You've opened the file in write mode. To read from the file,
you'll have to reopen it in read mode ("r").

Also, if the file you're dealing with really is a log file,
you probably want don't want to open it in write mode for
writing information either, since that will truncate the
file and lose previously logged information. Try append mode
("a") instead.



Cheers,


Aldo


--
Aldo Cortesi
(e-mail address removed)
http://www.nullcube.com
Off: (02) 9283 1131
Mob: 0419 492 863
 
G

Gurpreet Sachdeva

I tried
logfile=file(r'test.txt','w+')
logfile.write('datetime')
test=logfile.readlines()
print test

I got :
Open an encoded file using the given mode and return
a wrapped version providing transparent encoding/decoding.

Note: The wrapped version will only accept the object format
defined by the codecs, i.e. Unicode objects for most builtin
codecs. Output is also codec dependent and will usually by
Unicode as well.

Files are always opened in binary mode, even if no binary mode
was specified. This is done to avoid data loss due to encodings
using 8-bit values. The default file mode is 'rb' meaning to
open the file in binary read mode.

encoding specifies the encoding which is to be used for the
file.

errors may be given to define the error handling. It defaults
to 'strict' which causes ValueErrors to be raised in case an
encoding 
and a hell lot of junk. Can anyone explain that???
AFAIK w+ was ment for opening a file for both writting and reading...

Regards,
Garry


logfile = file(r'test.txt','w')
logfile.write('datetime')
logfile.close() # <- close the file

logfile = file(r'test.txt','r') # <- Open the file in read mode
test=logfile.readlines()


~Vishnu.

-----Original Message-----
From: [email protected]
[mailto:p[email protected]] On Behalf Of
(e-mail address removed)
Sent: Thursday, January 06, 2005 11:53 AM
To: (e-mail address removed)
Subject: file.readlines() - gives me error (bad file descriptor)

Hey guys,

I can't figure this one out, why is this simple script giving me
problems?

logfile=file(r'test.txt','w')
logfile.write('datetime')
test=logfile.readlines()

When I run it I get the error message:
Traceback (most recent call last):
File "C:\Documents and Settings\Gregory\My Documents\Get New Great
Job\testfile.py", line 3, in ?
test=logfile.readlines()
IOError: [Errno 9] Bad file descriptor

I'm running Windows XP, Python 2.3.3 (#51, Dec 18 2003, 20:22:39) [MSC
v.1200 32 bit (Intel)] on win32
Any help would be greatly appricated.

Thanks,

Greg
 
G

Gurpreet Sachdeva

logfile=file(r'test.txt','a+')
logfile.write('datetime')
logfile.flush()
test=logfile.readlines()
print test

I added logfile.flush(), the 'datetime' was written in the file
correctly but I couldn't get any result...

Crazy!
Garry
 
B

Binu K S

There's nothing crazy going on here. The file's current position moves
as you write into it. Both read and write operation use the same
offset. The tell() method gives you the current position at any time.
When you append to a file the position moves to the end of the file so
that the next write happens at the end. You normally wouldn't read
from the file that you are writing into. To read from the beginning,
change the position with seek. Here's how you do it:
logfile=file(r'test.txt','a+')
logfile.write('datetime')
logfile.flush()
test=logfile.readlines()
print test []
logfile.tell() 8L
logfile.seek(0,0)
test=logfile.readlines()
print test
['datetime']



logfile=file(r'test.txt','a+')
logfile.write('datetime')
logfile.flush()
test=logfile.readlines()
print test

I added logfile.flush(), the 'datetime' was written in the file
correctly but I couldn't get any result...

Crazy!
Garry
 
G

Gurpreet Sachdeva

I concure and have figured out the solution BUT while reading from the
file from the position where the file handler is, should return
"Null/Blank/Anything in this world" BUT should not write into the
file...
The information written was that in the Buffer of the handler... Does
that mean reading a file will actually release the buffer by throwing
the contents in the file???

Please Comment...

May be applicable in handling logs...

Regards,
Garry
 
B

Binu K S

I concure and have figured out the solution BUT while reading from the
file from the position where the file handler is, should return
"Null/Blank/Anything in this world" BUT should not write into the
file...
The information written was that in the Buffer of the handler... Does
that mean reading a file will actually release the buffer by throwing
the contents in the file???

I'm sorry, I didn't get what you trying to say here. Where do you see
a read altering the file? An example might help.
Please Comment...


May be applicable in handling logs...

Sometimes after opening a file you read the contents of a file and
then append to it. I haven't seen writing to a file and then going
back to see what was written.
 
G

Gurpreet Sachdeva

I'm sorry, I didn't get what you trying to say here. Where do you see
a read altering the file? An example might help.

Please try:

logfile=file(r'test.txt','w+')
logfile.write('datetime')

Check the contents of test.txt, you will get what ever was required...

Now Run:

logfile=file(r'test.txt','w+')
logfile.write('datetime')
logfile.readlines()

and check the contents of test.txt???
My doubt is that logfile.write('datetime') will write datetime that is
universaly accepted but why all that junk is appending to that when I
add logfile.readlines()

Strange or Am I on drugs??? :eek:)

Please Comment...

Garry
 
A

Abhijit Soman

Hey guys,

I can't figure this one out, why is this simple script giving me
problems?

logfile=file(r'test.txt','w')
logfile.write('datetime')
test=logfile.readlines()

When I run it I get the error message:
Traceback (most recent call last):
File "C:\Documents and Settings\Gregory\My Documents\Get New Great
Job\testfile.py", line 3, in ?
test=logfile.readlines()
IOError: [Errno 9] Bad file descriptor

I'm running Windows XP, Python 2.3.3 (#51, Dec 18 2003, 20:22:39) [MSC
v.1200 32 bit (Intel)] on win32
Any help would be greatly appricated.

Thanks,

Greg

As logfile is opened in write mode you cannot read it. You've to open it
in read mode for reading.


Greetings,
Abhijit
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,065
Latest member
OrderGreenAcreCBD

Latest Threads

Top