On 18Jan2016 16:29, ALAN GAULD <alan.ga...@btinternet.com> wrote:
On 18/01/16 16:01, Anshu Kumar wrote:
I try below code in python 2.7.10 to first create and write into a file and
then read and write that file but what i get is just a  file with new
content.


with open('test.txt', 'wb+') as f:
...     f.write('this is test file.')
...     f.write('ok!!!')
...
with open('test.txt', 'wb+') as f:
...     a_str = f.read() + 'read the file'
...     f.seek(0)
...     f.write(a_str)
...

You called f.seek(0) which puts the cursor right back to the start
of the file. Try writing without using the f.seek().

Agreed.

But since you only want to append, it would be better and safer to use
append mode instead.

The + modes are deceptively appealing but they are full of dangers
for precisely the reasons you have discovered(*). You very rarely
need them and you are better opening/closing the file and
using explicit modes to read/write.

But if he wants to mix the modes, he certainly should be experimenting. Having a file open for read and write is sometimes useful; I do it myself in certain circumstances.

Tip for new players: if you do any .write()s, remember to do a .flush() before doing a seek or a read - unlike the C stdio library where the flush is automatic in Python the io classes require you to flush written data if you read or seek. (You don't have to flush before close, close does that for you.)

(*)Another problem, apart from the risks of overwriting your
data,  is that the + modes will lock the file even while you
are just reading it, which might cause a problem with shared
files)

Only on Windows. On UNIX everything is fine unless you go out of your way to make things harder with locking.

I have read in documentation that wb+ mode is for writing and reading. Am i
using wrong mode, should i use rb+ ?

No, you should probably be separately using 'r' to read and 'a'
to append.

Disagree. As far as his question goes, "wb+" is a correct mode for what he is trying. Whether it is a sensible approach depends very much on what he is doing with his files.

He _may_ be safer opening the file twice - once for "rb" and once for "ab" - because he does not have to juggle the modes, but it isn't necessarily what he wants.

Cheers,
Cameron Simpson <c...@zip.com.au>
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to