mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 10:26:02 +00:00 
			
		
		
		
	 7796d3179b
			
		
	
	
		7796d3179b
		
			
		
	
	
	
	
		
			
			* gh-98098: Move zipfile into a package. * Moved test_zipfile to a package * Extracted module for test_path. * Add blurb * Add jaraco as owner of zipfile.Path. * Synchronize with minor changes found at jaraco/zipp@d9e7f4352d.
		
			
				
	
	
		
			77 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import sys
 | |
| import os
 | |
| from . import ZipFile, ZIP_DEFLATED
 | |
| 
 | |
| 
 | |
| def main(args=None):
 | |
|     import argparse
 | |
| 
 | |
|     description = 'A simple command-line interface for zipfile module.'
 | |
|     parser = argparse.ArgumentParser(description=description)
 | |
|     group = parser.add_mutually_exclusive_group(required=True)
 | |
|     group.add_argument('-l', '--list', metavar='<zipfile>',
 | |
|                        help='Show listing of a zipfile')
 | |
|     group.add_argument('-e', '--extract', nargs=2,
 | |
|                        metavar=('<zipfile>', '<output_dir>'),
 | |
|                        help='Extract zipfile into target dir')
 | |
|     group.add_argument('-c', '--create', nargs='+',
 | |
|                        metavar=('<name>', '<file>'),
 | |
|                        help='Create zipfile from sources')
 | |
|     group.add_argument('-t', '--test', metavar='<zipfile>',
 | |
|                        help='Test if a zipfile is valid')
 | |
|     parser.add_argument('--metadata-encoding', metavar='<encoding>',
 | |
|                         help='Specify encoding of member names for -l, -e and -t')
 | |
|     args = parser.parse_args(args)
 | |
| 
 | |
|     encoding = args.metadata_encoding
 | |
| 
 | |
|     if args.test is not None:
 | |
|         src = args.test
 | |
|         with ZipFile(src, 'r', metadata_encoding=encoding) as zf:
 | |
|             badfile = zf.testzip()
 | |
|         if badfile:
 | |
|             print("The following enclosed file is corrupted: {!r}".format(badfile))
 | |
|         print("Done testing")
 | |
| 
 | |
|     elif args.list is not None:
 | |
|         src = args.list
 | |
|         with ZipFile(src, 'r', metadata_encoding=encoding) as zf:
 | |
|             zf.printdir()
 | |
| 
 | |
|     elif args.extract is not None:
 | |
|         src, curdir = args.extract
 | |
|         with ZipFile(src, 'r', metadata_encoding=encoding) as zf:
 | |
|             zf.extractall(curdir)
 | |
| 
 | |
|     elif args.create is not None:
 | |
|         if encoding:
 | |
|             print("Non-conforming encodings not supported with -c.",
 | |
|                   file=sys.stderr)
 | |
|             sys.exit(1)
 | |
| 
 | |
|         zip_name = args.create.pop(0)
 | |
|         files = args.create
 | |
| 
 | |
|         def addToZip(zf, path, zippath):
 | |
|             if os.path.isfile(path):
 | |
|                 zf.write(path, zippath, ZIP_DEFLATED)
 | |
|             elif os.path.isdir(path):
 | |
|                 if zippath:
 | |
|                     zf.write(path, zippath)
 | |
|                 for nm in sorted(os.listdir(path)):
 | |
|                     addToZip(zf,
 | |
|                              os.path.join(path, nm), os.path.join(zippath, nm))
 | |
|             # else: ignore
 | |
| 
 | |
|         with ZipFile(zip_name, 'w') as zf:
 | |
|             for path in files:
 | |
|                 zippath = os.path.basename(path)
 | |
|                 if not zippath:
 | |
|                     zippath = os.path.basename(os.path.dirname(path))
 | |
|                 if zippath in ('', os.curdir, os.pardir):
 | |
|                     zippath = ''
 | |
|                 addToZip(zf, path, zippath)
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 |