473,408 Members | 1,707 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,408 software developers and data experts.

ZIP files

Hi!
I'm beginning to use the zipfile module in Python and I'm confused
about something. I am trying to extract certain files from one zip and
copy them into another one. This is the code I‘ve got so far:
import string
import os, re
from zipfile import *
path= raw_input("\n Please enter the zipfile to be copied: ")

new_zip= ZipFile('something.zip', 'w')
orig_zip=ZipFile(path, 'r')
zip_files= orig_zip.namelist()
for file in zip_files:
if file[-2:] == '.c' or file[-2:] == '.h' or file[-4:] == '.exe':
tempfile = open(file,'w')
x = orig_zip.read(file)
tempfile.write(x)
tempfile.close()
new_zip.write(file)

So far, this code does the work, but I think it's to much work for
just copying entire files…Is there any other way to do this????
Basically, what I want to do is create a copy of the zip but with a
different name…thanks in advance, Oriana
Jul 18 '05 #1
8 1861
Oriana wrote:
I'm beginning to use the zipfile module in Python and I'm confused
about something. I am trying to extract certain files from one zip and
copy them into another one. This is the code I‘ve got so far: [copied by writing to temporary files]
So far, this code does the work, but I think it's to much work for
just copying entire files…Is there any other way to do this????


How about a function like:

import os.path, zipfile

def copy_zip(source_name, dest_name, extensions):
source = zipfile.ZipFile(source_name, 'r')
dest = zipfile.ZipFile(dest_name, 'w', zipfile.ZIP_DEFLATED)
for name in source.namelist():
if os.path.splitext(name)[1].lower() in extensions:
contents = source.read(name)
dest.writestr(name, contents)
dest.close()
source.close()

copy_zip('source.zip', 'dest.zip', {'.c':1, '.h':1, '.exe':1})

If this does the trick for you, try to figure out why you didn't
find "writestr" in the zipfile document. Let us know how we might
improve the document so that we can save work for the next guy.

--Scott David Daniels
Sc***********@Acm.Org
Jul 18 '05 #2
On 10 Nov 2004 08:05:28 -0800, or**********@thalesesec.com (Oriana)
wrote:
Hi!
I'm beginning to use the zipfile module in Python and I'm confused
about something. I am trying to extract certain files from one zip and
copy them into another one. This is the code I‘ve got so far:
import string
import os, re
from zipfile import *
path= raw_input("\n Please enter the zipfile to be copied: ")

new_zip= ZipFile('something.zip', 'w')
orig_zip=ZipFile(path, 'r')
zip_files= orig_zip.namelist()
for file in zip_files:
if file[-2:] == '.c' or file[-2:] == '.h' or file[-4:] == '.exe': # don't do it like this ^^^
if os.path.splitext(file)[1] in ['.c','.h','.exe',]:
# this code is cleaner ^^^ tempfile = open(file,'w')
x = orig_zip.read(file)
tempfile.write(x)
tempfile.close()
new_zip.write(file)

So far, this code does the work, but I think it's to much work for
just copying entire files…Is there any other way to do this????
Basically, what I want to do is create a copy of the zip but with a
different name…thanks in advance, Oriana


if you want a copy of the zip as is then:

def filecopy(infile, outfile):
i = open(infile, "rb")
o = open(outfile, "wb")
while 1:
s = i.read(8192)
if not s:
break
o.write(s)

You might wish to try using a larger buffer than 8192 bytes. BTW,
note that Python automatically closes the files since the file objects
are released when the function returns.

Finally, if you can assume that the files are not huge, why not try
the following one-liner instead:

open(outfile, "wb").write(open(infile, "rb").read())
if you want to copy certain files from the sourceZIP to a targetZIP
this does not work and you were doing it about right.

cheerz,
Ivo.
Jul 18 '05 #3
Ivo Woltring <Py****@IvoNet.nl> writes:
On 10 Nov 2004 08:05:28 -0800, or**********@thalesesec.com (Oriana)
You might wish to try using a larger buffer than 8192 bytes. BTW,
note that Python automatically closes the files since the file objects
are released when the function returns.


This behavior of file objects isn't guaranteed and doesn't happen in
Jython. It's better - and more pythonic - to explicitly close files.

After all, explicit is better than implicit.

<mike
--
Mike Meyer <mw*@mired.org> http://www.mired.org/home/mwm/
Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information.
Jul 18 '05 #4
Mike Meyer <mw*@mired.org> wrote in message news:<x7************@guru.mired.org>...
Ivo Woltring <Py****@IvoNet.nl> writes:
On 10 Nov 2004 08:05:28 -0800, or**********@thalesesec.com (Oriana)
You might wish to try using a larger buffer than 8192 bytes. BTW,
note that Python automatically closes the files since the file objects
are released when the function returns.


This behavior of file objects isn't guaranteed and doesn't happen in
Jython. It's better - and more pythonic - to explicitly close files.

After all, explicit is better than implicit.

<mike


Hmmm... does this mean that

open(filename, 'w').write(filedata)

is unsafe ? It's so much more convenient when the object is only going
to be used for the single action.

Regards,

Fuzzy
http://www.voidspace.org.uk/atlantib...thonutils.html
Jul 18 '05 #5
Michael Foord <fu******@gmail.com> wrote:
Hmmm... does this mean that

open(filename, 'w').write(filedata)

is unsafe ? It's so much more convenient when the object is only going
to be used for the single action.


It's not exactly unsafe -- but you do risk, depending on what
implementation of Python you're dealing with, that the file object will
just stay open until some unknown time in the future (no later than the
end of your program's run;-). This may potentially lead to problems if
your program is long-running or open lots of files, etc.

def write_data(filename, data, flags='w'):
fileobject = open(filename, flags)
try: fileobject.write(data)
finally: fileobject.close()

needs to be coded once, and then makes the operation just as convenient
as doing it inline...
Alex
Jul 18 '05 #6
al*****@yahoo.com (Alex Martelli) writes:
Michael Foord <fu******@gmail.com> wrote:
Hmmm... does this mean that

open(filename, 'w').write(filedata)

is unsafe ? It's so much more convenient when the object is only going
to be used for the single action.


It's not exactly unsafe -- but you do risk, depending on what
implementation of Python you're dealing with, that the file object will
just stay open until some unknown time in the future (no later than the
end of your program's run;-). This may potentially lead to problems if
your program is long-running or open lots of files, etc.

def write_data(filename, data, flags='w'):
fileobject = open(filename, flags)
try: fileobject.write(data)
finally: fileobject.close()

needs to be coded once, and then makes the operation just as convenient
as doing it inline...


I'd suggest to expand this a bit, and make it working correctly on
windows too, where binary files must be opened with the 'b' flag:

def _write_data(filename, data, flags):
fileobject = open(filename, flags)
try: fileobject.write(data)
finally: fileobject.close()

def write_data(filename, data, flags="wb"):
_write_data(filename, data, flags)

def write_text(filename, text, flags="w"):
_write_data(filename, data, flags)

plus the corresponding read_data() and read_text() functions.
Hm, add an encoding for unicode, maybe...
Cookbook recipe, or standard lib?

Thomas
Jul 18 '05 #7
Thomas Heller <th*****@python.net> wrote:
...
def write_data(filename, data, flags='w'):
fileobject = open(filename, flags)
try: fileobject.write(data)
finally: fileobject.close()

needs to be coded once, and then makes the operation just as convenient
as doing it inline...
I'd suggest to expand this a bit, and make it working correctly on
windows too, where binary files must be opened with the 'b' flag:


Hmmm, I thought the optional flags parm would suffice, but you're
probably right it wouldn't...
def _write_data(filename, data, flags):
fileobject = open(filename, flags)
try: fileobject.write(data)
finally: fileobject.close()

def write_data(filename, data, flags="wb"):
_write_data(filename, data, flags)

def write_text(filename, text, flags="w"):
_write_data(filename, data, flags)

plus the corresponding read_data() and read_text() functions.
Hm, add an encoding for unicode, maybe...
Cookbook recipe, or standard lib?


I'm tempted to add convenience to the write_data wrapper by accepting
some non-str type for data, but that might be going overboard...
Alex
Jul 18 '05 #8
[snip..]
I'd suggest to expand this a bit, and make it working correctly on
windows too, where binary files must be opened with the 'b' flag:

def _write_data(filename, data, flags):
fileobject = open(filename, flags)
try: fileobject.write(data)
finally: fileobject.close()

def write_data(filename, data, flags="wb"):
_write_data(filename, data, flags)

def write_text(filename, text, flags="w"):
_write_data(filename, data, flags)

plus the corresponding read_data() and read_text() functions.
Hm, add an encoding for unicode, maybe...
Cookbook recipe, or standard lib?

Thomas

Hmm...I have a set of functions as a module - readfile, writefile,
readlines, writelines. My guess is that *everyone* has a similar
module they've written themselves. It can be a PITA cutting and
pasting the functions for a single line job sometimes. It would be a
useful addition to the standard lib.

Regards,

Fuzzy
Jul 18 '05 #9

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
by: Mike | last post by:
I am sure that I am making a simple boneheaded mistake and I would appreciate your help in spotting in. I have just installed apache_2.0.53-win32-x86-no_ssl.exe php-5.0.3-Win32.zip...
44
by: Xah Lee | last post by:
here's a large exercise that uses what we built before. suppose you have tens of thousands of files in various directories. Some of these files are identical, but you don't know which ones are...
0
by: Tom Lee | last post by:
Hi, I'm new to .NET 2003 compiler. When I tried to compile my program using DEBUG mode, I got the following errors in the C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7 \include\xdebug...
18
by: JKop | last post by:
Here's what I know so far: You have a C++ project. You have source files in it. When you go to compile it, first thing the preprocessor sticks the header files into each source file. So now...
3
by: pooja | last post by:
Suppose i have created a class c1 with f1()in c1.cpp and included this c1.cpp in file1.cpp file , which is also having main() by giving the statement #include "c1.cpp". the same i can do by...
11
by: ambika | last post by:
Iam just trying to know "c". And I have a small doubt about these header files. The header files just contain the declaration part...Where is the definition for these declarations written??And how...
22
by: Daniel Billingsley | last post by:
Ok, I wanted to ask this separate from nospam's ridiculous thread in hopes it could get some honest attention. VB6 had a some simple and fast mechanisms for retrieving values from basic text...
18
by: UJ | last post by:
Folks, We provide custom content for our customers. Currently we put the files on our server and people have a program we provide that will download the files. These files are usually SWF, HTML or...
0
by: wal | last post by:
How does one attach files to emails using libgmail? The following code http://pramode.net/articles/lfy/fuse/4.txt works fine when said files are simple text files, but it failes as soon as the...
3
by: aRTx | last post by:
I have try a couple of time but does not work for me My files everytime are sortet by NAME. I want to Sort my files by Date-desc. Can anyone help me to do it? The Script <? /* ORIGJINALI
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.