diff options
author | Just van Rossum <just@letterror.com> | 2002-12-12 12:23:32 (GMT) |
---|---|---|
committer | Just van Rossum <just@letterror.com> | 2002-12-12 12:23:32 (GMT) |
commit | b083cb3901fcb7487c04ad996148d1cf0aa32350 (patch) | |
tree | 8a3558425da1c61b81a8f22ab7b0b98c2fe622cf | |
parent | 6c7e326eaaa2d814e0d299054f78e5bd187489ab (diff) | |
download | cpython-b083cb3901fcb7487c04ad996148d1cf0aa32350.zip cpython-b083cb3901fcb7487c04ad996148d1cf0aa32350.tar.gz cpython-b083cb3901fcb7487c04ad996148d1cf0aa32350.tar.bz2 |
Patch #651621, approved by MvL.
This patch allows ZipFile.writestr() to be called with
an archive file name instead of a ZipInfo instance:
z = ZipFile("myarchive.zip", "w")
z.writestr("foo/baz/file.ext", data)
z.close()
I found the old writestr() method very inconvenient
for simple (but common) things.
If called with a file name instead of a ZipInfo
instance, the date_time is set to the current date/time,
which makes sense to me for anonymous data.
-rw-r--r-- | Doc/lib/libzipfile.tex | 12 | ||||
-rw-r--r-- | Lib/zipfile.py | 11 |
2 files changed, 16 insertions, 7 deletions
diff --git a/Doc/lib/libzipfile.tex b/Doc/lib/libzipfile.tex index a6430cb..69e7878 100644 --- a/Doc/lib/libzipfile.tex +++ b/Doc/lib/libzipfile.tex @@ -146,11 +146,13 @@ cat myzip.zip >> python.exe \code{'a'}. \end{methoddesc} -\begin{methoddesc}{writestr}{zinfo, bytes} - Write the string \var{bytes} to the archive; meta-information is - given as the \class{ZipInfo} instance \var{zinfo}. At least the - filename, date, and time must be given by \var{zinfo}. The archive - must be opened with mode \code{'w'} or \code{'a'}. +\begin{methoddesc}{writestr}{zinfo_or_arcname, bytes} + Write the string \var{bytes} to the archive; \var{zinfo_or_arcname} + is either the file name it will be given in the archive, or a + \class{ZipInfo} instance. If it's an instance, at least the + filename, date, and time must be given. If it's a name, the date + and time is set to the current date and time. The archive must be + opened with mode \code{'w'} or \code{'a'}. \end{methoddesc} diff --git a/Lib/zipfile.py b/Lib/zipfile.py index 4f2b946..6aed172 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -447,9 +447,16 @@ class ZipFile: self.filelist.append(zinfo) self.NameToInfo[zinfo.filename] = zinfo - def writestr(self, zinfo, bytes): + def writestr(self, zinfo_or_arcname, bytes): """Write a file into the archive. The contents is the string - 'bytes'.""" + 'bytes'. 'zinfo_or_arcname' is either a ZipInfo instance or + the name of the file in the archive.""" + if not isinstance(zinfo_or_arcname, ZipInfo): + zinfo = ZipInfo(filename=zinfo_or_arcname, + date_time=time.localtime(time.time())) + zinfo.compress_type = self.compression + else: + zinfo = zinfo_or_arcname self._writecheck(zinfo) zinfo.file_size = len(bytes) # Uncompressed size zinfo.CRC = binascii.crc32(bytes) # CRC-32 checksum |