On Apr 29, 10:14 pm, "Daniel Nogradi" <[EMAIL PROTECTED]> wrote: > > > > I made a C/S network program, the client receive the zip file from the > > > > server, and read the data into a variable. how could I process the > > > > zipfile directly without saving it into file. > > > > In the document of the zipfile module, I note that it mentions the > > > > file-like object? what does it mean? > > > > > class ZipFile( file[, mode[, compression[, allowZip64]]]) > > > > Open a ZIP file, where file can be either a path to a file (a > > > > string) or a file-like object. > > > > Yes it is possible to process the content of the zipfile without > > > saving every file: > > > > [untested] > > > > from zipfile import ZipFile > > > from StringIO import StringIO > > > > zipp = ZipFile( this_is_the_zip_file_from_your_server, 'r' ) > > > for name in zipp.namelist( ): > > > content = zipp.read( name ) > > > s = StringIO( ) > > > s.write( content ) > > > # now the file 'name' is in 's' (in memory) > > > # you can process it further > > > # ............ > > > s.close( ) > > > zipp.close( ) > > > > HTH, > > > Daniel > > Thanks! > > Maybe my poor english makes you confusion:-). The client receive the > > zip file data from the server, and keep these data as a variable, not > > as a file in harddisk. such as "zipFileData", but the first argument > > of the "ZipFile" is filename. I would like to let the ZipFile() open > > the file from "zipFileData" directly but not file in harddisk > > > zipp = ZipFile( this_is_the_zip_file_from_your_server, 'r' ) > > ^ I don't have this file, all its data > > is in a variable. > > Well, as you correctly pointed out in your original post ZipFile can > receive a filename or a file-like object. If the zip archive data is > in zipFileData then you might do: > > from StringIO import StringIO > from zipfile import ZipFile > > data = StringIO( ) > data.write( zipFileData ) > data.close( )
Even if that worked, it would be a long-winded way to do it. Please contemplate the docs: """getvalue( ) Retrieve the entire contents of the ``file'' at any time before the StringIO object's close() method is called.[snip note re mixing str & unicode] close( ) Free the memory buffer. """ The short working way is: """class StringIO( [buffer]) When a StringIO object is created, it can be initialized to an existing string by passing the string to the constructor.""" -- http://mail.python.org/mailman/listinfo/python-list