newbie: write content in a file (server-side)

Thomas Kaufmann tokauf at googlemail.com
Mon Jul 30 11:50:12 CEST 2012


Am Sonntag, 29. Juli 2012 17:16:11 UTC+2 schrieb Peter Otten:
> Thomas Kaufmann wrote:
> 
> 
> 
> > I send from a client file content to my server (as bytes). So far so good.
> 
> > The server receives this content complete. Ok. Then I want to write this
> 
> > content to a new file. It works too. But in the new file are only the
> 
> > first part of the whole content.
> 
> > 
> 
> > What's the problem.
> 
> 
> 
> > Here's my server code:
> 
> 
> 
> >         while True:
> 
> >             bytes = self.request.recv(4096)
> 
> >             if bytes:
> 
> >                 s  = bytes.decode("utf8")
> 
> >                 print(s)
> 
> >                 li = s.split("~")
> 
> >                 with open(li[0], 'w') as fp:
> 
> >                     fp.write(li[1])
> 
> 
> 
> - Do you ever want to leave the loop?
> 
> 
> 
> - You calculate a new filename on every iteration of the while loop -- 
> 
> probably not what you intended to do.
> 
> 
> 
> - The "w" argument tells Python to overwrite the file if it exists. You 
> 
> either need to keep the file open (move the with... out of the loop) or open 
> 
> it with "a".
> 
> 
> 
> - You may not receive the complete file name on the first iteration of the 
> 
> while loop.
> 
> 
> 
> - The bytes buffer can contain incomplete characters, e. g.:
> 
> 
> 
> >>> data = b"\xc3\xa4"
> 
> >>> data.decode("utf-8")
> 
> 'ä'
> 
> >>> data[:1].decode("utf-8")
> 
> Traceback (most recent call last):
> 
>   File "<stdin>", line 1, in <module>
> 
> UnicodeDecodeError: 'utf8' codec can't decode byte 0xc3 in position 0: 
> 
> unexpected end of data


Thanks Peter. It helps;-).



More information about the Python-list mailing list