99import os .path
1010import io
1111import re
12+ import pathlib
1213import fnmatch
1314
1415
15- def zip_folder (folder , zip_path , ignored_patterns = ()):
16+ def zip_folder (source_folder , zip_path , ignored_patterns = ()):
1617 '''
1718 Zip `folder` into a zip file specified by `zip_path`.
1819
@@ -25,32 +26,35 @@ def zip_folder(folder, zip_path, ignored_patterns=()):
2526
2627 Any empty sub-folders will be ignored.
2728 '''
28- assert os .path .isdir (folder )
29- source_folder = os .path .realpath (folder )
29+ zip_path = pathlib .Path (zip_path )
30+ source_folder = pathlib .Path (source_folder ).absolute ()
31+ assert source_folder .is_dir ()
3032
3133 ignored_re_patterns = [re .compile (fnmatch .translate (ignored_pattern )) for
3234 ignored_pattern in ignored_patterns ]
3335
34- zip_name = os .path .splitext (os .path .split (zip_path )[1 ])[0 ]
35- source_folder_name = os .path .split (source_folder )[1 ]
36-
36+ zip_name = zip_path .name [:- len (zip_path .suffix )]
37+
38+ internal_pure_path = pathlib .PurePath (source_folder .name )
39+
3740 with zip_module .ZipFile (zip_path , 'w' , zip_module .ZIP_DEFLATED ) \
3841 as zip_file :
3942
4043 for root , subfolders , files in os .walk (source_folder ):
44+ root = pathlib .Path (root )
45+ subfolders = map (pathlib .Path , subfolders )
46+ files = map (pathlib .Path , files )
4147
4248 for file_path in files :
4349
44- if any (ignored_re_pattern .match (os . path . join ( root , file_path ) )
45- for ignored_re_pattern in ignored_re_patterns ):
50+ if any (ignored_re_pattern .match (root / file_path )
51+ for ignored_re_pattern in ignored_re_patterns ):
4652 continue
4753
48- absolute_file_path = os . path . join ( root , file_path )
54+ absolute_file_path = root / file_path
4955
50- destination_file_path = os .path .join (
51- source_folder_name ,
52- absolute_file_path [(len (source_folder ) + len (os .sep )):]
53- )
56+ destination_file_path = internal_pure_path / \
57+ absolute_file_path .name
5458
5559 zip_file .write (absolute_file_path , destination_file_path )
5660
0 commit comments