944,153 Members | Top Members by Rank

Ad:
  • Python Code Snippet
  • Views: 9778
  • Python RSS
2

Use Python module tarfile to compress files

by on Jan 18th, 2007
The Python module 'tarfile' is more flexible then it's counterpart 'zipfile'. It allows you to simply archive files without compression, or use the gzip format of compression, or the super compression format bzip2. Here is code to show you the use of the module.
Python Code Snippet (Toggle Plain Text)
  1. # work with a tarball compressed archive file (similar to zip)
  2. # Python module tarfile is better and more flexible than zipfile
  3. # it allows gzip and the even denser bzip2 compression
  4. # tested with Python24 vegaseat 18jan2007
  5.  
  6. import tarfile
  7.  
  8. str1 = "If you want breakfast in bed, sleep in the kitchen."
  9. str2 = "Dinner is ready when the smoke alarm goes off."
  10. str3 = "How can I miss you if you won't go away?"
  11.  
  12. # write test file 1
  13. fout = open("TarTest1.txt", "w")
  14. fout.write(str1)
  15. fout.close()
  16.  
  17. # write test file 2
  18. fout = open("TarTest2.txt", "w")
  19. fout.write(str2)
  20. fout.close()
  21.  
  22. # write test file 3
  23. fout = open("TarTest3.txt", "w")
  24. fout.write(str3)
  25. fout.close()
  26.  
  27. # pick your compression ...
  28. # for uncompressed use file extension .tar and modifier "w"
  29. # for gzip compressed use file extension .tar.gz and modifier "w:gz"
  30. # for bzip2 super compressed use file extension .tar.bz2 and "w:bz2"
  31. # use "w", "w:gz" or "w:bz2" for all file types, including binary files
  32. tar = tarfile.open("TarTest.tar.bz2", "w:bz2")
  33.  
  34. # turn the three test files into a tar archive
  35. for name in ["TarTest1.txt", "TarTest2.txt", "TarTest3.txt"]:
  36. tar.add(name)
  37. tar.close()
  38.  
  39. print '-'*40
  40.  
  41. # test if the file is a valid tar file
  42. tfilename = "TarTest.tar.bz2"
  43. if tarfile.is_tarfile(tfilename):
  44. print "%s is a valid tar file" % tfilename
  45. else:
  46. print "%s is not a valid tar file" % tfilename
  47.  
  48. print '-'*40
  49.  
  50. # read the tarfile you just wrote
  51. tar = tarfile.open("TarTest.tar.bz2", "r:bz2")
  52. file_list = []
  53. for file in tar:
  54. # show filename and size (bytes)
  55. print "file %s has a size of %d bytes" % (file.name, file.size)
  56. file_list.append(file.name)
  57.  
  58. # another way to get the file list
  59. file_list2 = tar.getnames()
  60.  
  61. print '-'*50
  62. print file_list
  63. print file_list2
  64. print '-'*50
  65.  
  66. # pick one of the three files in the tar-archive (tarball)
  67. filename = file_list[1]
  68.  
  69. # decompress the particular file
  70. data = tar.extractfile(filename).read()
  71.  
  72. # if it's a text file, show contents
  73. if filename.endswith(".txt"):
  74. print "Content of file %s in the tarball:" % filename
  75. print data
  76.  
  77. # write the files out to new files
  78. for fname in tar.getnames():
  79. # extract/decompress the data of each file
  80. data = tar.extractfile(fname).read()
  81. # optionally change the filename
  82. new_file = "new_" + fname
  83. print "File %s written!" % new_file
  84. # write the decompressed data to a file
  85. fout = open(new_file, "w")
  86. fout.write(data)
  87. fout.close()
  88.  
  89. # done, close the tar file ...
  90. tar.close()
Comments on this Code Snippet
May 14th, 2010
0

directory hierarchy

How do i compress the file withou the directory hierarchy?

i´m doing like this:

tar = tarfile.open(destinationfile, "w:bz2")
for f in filelist:
tar.add(f)
#os.remove(f)
tar.close()

When i extract the compressed file, all those directories are extracted too. So, i want to compress without them

Thanks in advance
Newbie Poster
fchevitarese is offline Offline
2 posts
since May 2010
May 14th, 2010
1

Re: Use Python module tarfile to compress files

Hey man...
Looking at other codes, i´ve found the solution...

Like this:

tar = tarfile.open(destinationfile, "w:bz2")
for f in filelist:
tar.add(f, os.path.basename(f))
os.remove(f)
tar.close()

Thank you
Newbie Poster
fchevitarese is offline Offline
2 posts
since May 2010
May 15th, 2010
0

Re: Use Python module tarfile to compress files

Thanks for sharing this insight with us!
DaniWeb's Hypocrite
vegaseat is offline Offline
5,792 posts
since Oct 2004
Message:
Previous Thread in Python Forum Timeline: Converting strings to grapics
Next Thread in Python Forum Timeline: Loop confusion





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC