উত্তর:
অন্যরা যেমন উল্লেখ করেছে, আপনার জিপ ফাইল ব্যবহার করা উচিত । ডকুমেন্টেশন আপনাকে কী ফাংশনগুলি উপলভ্য তা আপনাকে জানায়, তবে কীভাবে আপনি এটি একটি সম্পূর্ণ ডিরেক্টরি জিপ করতে ব্যবহার করতে পারেন তা সত্যিই ব্যাখ্যা করে না। আমি মনে করি কিছু উদাহরণ কোড দিয়ে ব্যাখ্যা করা সবচেয়ে সহজ:
#!/usr/bin/env python
import os
import zipfile
def zipdir(path, ziph):
# ziph is zipfile handle
for root, dirs, files in os.walk(path):
for file in files:
ziph.write(os.path.join(root, file))
if __name__ == '__main__':
zipf = zipfile.ZipFile('Python.zip', 'w', zipfile.ZIP_DEFLATED)
zipdir('tmp/', zipf)
zipf.close()
এর থেকে গৃহীত: http://www.devshed.com/c/a/Python/Python-UnZided/
os.path.relpath(os.path.join(root, file), os.path.join(path, '..'))
। সংরক্ষণাগারে সম্পূর্ণ নিখুঁত পাথ না পেয়ে এটি আপনাকে কোনও কার্যনির্বাহী ডিরেক্টরি থেকে একটি ডিরেক্টরি জিপ করতে দেয়।
shutil
এটি কেবল একটি এক লাইনে সত্যই সহজ করে তোলে। দয়া করে নীচের উত্তরটি দেখুন ..
.close()
কল মিস করছিলাম !
সবচেয়ে সহজ উপায় হ'ল ব্যবহার করা shutil.make_archive
। এটি জিপ এবং টার উভয় ফর্ম্যাটকে সমর্থন করে।
import shutil
shutil.make_archive(output_filename, 'zip', dir_name)
আপনার যদি পুরো ডিরেক্টরিটি জিপ করা (যেমন নির্দিষ্ট ফাইলগুলি এড়ানো) এর চেয়ে আরও জটিল কিছু করতে হয় তবে zipfile
অন্যদের পরামর্শ অনুসারে আপনাকে মডিউলটি খনন করতে হবে ।
shutil
এটি স্ট্যান্ডার্ড পাইথন লাইব্রেরির অংশ। এটি শীর্ষের উত্তর হওয়া উচিত
shutil.make_archive
ব্যবহার করে os.chdir()
। আমি যা পড়ছি তা থেকে os.chdir()
এটি বিশ্বব্যাপী পরিচালনা করে।
mydirectory
সমস্ত ফাইল এবং উপ-ডিরেক্টরি সহ নতুন জিপ ফাইলে বিষয়বস্তু যুক্ত করতে :
import os
import zipfile
zf = zipfile.ZipFile("myzipfile.zip", "w")
for dirname, subdirs, files in os.walk("mydirectory"):
zf.write(dirname)
for filename in files:
zf.write(os.path.join(dirname, filename))
zf.close()
with
কল করার পরিবর্তে আপনি কি একটি ব্যবহার করতে পারবেন না close()
?
পাইথনে আমি কীভাবে ডিরেক্টরি কাঠামোর একটি জিপ সংরক্ষণাগার তৈরি করতে পারি?
পাইথন ২.7++ shutil
তে একটি make_archive
ফাংশন রয়েছে।
from shutil import make_archive
make_archive(
'zipfile_name',
'zip', # the archive format - or tar, bztar, gztar
root_dir=None, # root for archive - current working dir if None
base_dir=None) # start archiving from here - cwd if None too
এখানে জিপ করা সংরক্ষণাগারটির নাম দেওয়া হবে zipfile_name.zip
। যদি base_dir
এটি থেকে আরও নিচে থাকে root_dir
তবে ফাইলগুলিকে অন্তর্ভুক্ত করবেন না base_dir
তবে তারপরেও পিতামাতার মধ্যে ফাইলগুলি সংরক্ষণাগারভুক্ত করুনroot_dir
।
সাইগউইনের উপর এটি পরীক্ষা করার জন্য আমার একটি সমস্যা ছিল 2.7 - এটি সিডব্লিউডের জন্য একটি মূল_দির যুক্তি চায়:
make_archive('zipfile_name', 'zip', root_dir='.')
zipfile
মডিউলটি ব্যবহার করে আপনি শেল থেকে পাইথন দিয়ে এটি করতে পারেন :
$ python -m zipfile -c zipname sourcedir
zipname
আপনি যে গন্তব্য ফাইলটি চান তার নাম কোথায় ( .zip
আপনি এটি চাইলে যোগ করুন , এটি স্বয়ংক্রিয়ভাবে এটি করবে না) এবং স্যুরসিডির হ'ল ডিরেক্টরিটির পথ।
আপনি যদি একটি সঙ্গে একটি পাইথন প্যাকেজ zip করার চেষ্টা করছেন তবে __init__.py
এবং __main__.py
, এবং আপনি পিতা বা মাতা Dir চাই না, এটা
$ python -m zipfile -c zipname sourcedir/*
এবং
$ python zipname
প্যাকেজ চালাতে হবে। (মনে রাখবেন যে আপনি একটি জিপ করা সংরক্ষণাগার থেকে প্রবেশ পয়েন্ট হিসাবে সাবপ্যাকেজগুলি চালাতে পারবেন না))
যদি আপনার কাছে পাইথন ৩.৫ + থাকে এবং বিশেষত পাইথন প্যাকেজটি জিপ আপ করতে চান তবে জিপ্যাপ ব্যবহার করুন :
$ python -m zipapp myapp
$ python myapp.pyz
এই ফাংশনটি পুনরাবৃত্তভাবে একটি ডিরেক্টরি ট্রি জিপ আপ করবে, ফাইলগুলি সংকুচিত করবে এবং সংরক্ষণাগারে সঠিক আপেক্ষিক ফাইলের নাম রেকর্ড করবে। সংরক্ষণাগার এন্ট্রিগুলি উত্পন্ন হিসাবে একই zip -r output.zip source_dir
।
import os
import zipfile
def make_zipfile(output_filename, source_dir):
relroot = os.path.abspath(os.path.join(source_dir, os.pardir))
with zipfile.ZipFile(output_filename, "w", zipfile.ZIP_DEFLATED) as zip:
for root, dirs, files in os.walk(source_dir):
# add directory (needed for empty dirs)
zip.write(root, os.path.relpath(root, relroot))
for file in files:
filename = os.path.join(root, file)
if os.path.isfile(filename): # regular files only
arcname = os.path.join(os.path.relpath(root, relroot), file)
zip.write(filename, arcname)
শুটিল ব্যবহার করুন যা পাইথন স্ট্যান্ডার্ড লাইব্রেরি সেটের অংশ। শুটিল ব্যবহার এত সহজ (নীচের কোডটি দেখুন):
কোড:
import shutil
shutil.make_archive('/home/user/Desktop/Filename','zip','/home/username/Desktop/Directory')
ফলাফলযুক্ত জিপ ফাইলটিতে সংকোচনের জন্য, এই লিঙ্কটি দেখুন ।
আপনাকে পরিবর্তন করতে হবে:
zip = zipfile.ZipFile('Python.zip', 'w')
প্রতি
zip = zipfile.ZipFile('Python.zip', 'w', zipfile.ZIP_DEFLATED)
আমি মার্ক বাইয়ার্স দ্বারা প্রদত্ত কোডে কিছু পরিবর্তন করেছি । নীচের ফাংশনটি খালি ডিরেক্টরি যুক্ত করে যদি সেগুলি থাকে। জিপগুলিতে কী যোগ করা হয়েছে তা উদাহরণগুলি আরও স্পষ্ট করে তুলবে।
#!/usr/bin/env python
import os
import zipfile
def addDirToZip(zipHandle, path, basePath=""):
"""
Adding directory given by \a path to opened zip file \a zipHandle
@param basePath path that will be removed from \a path when adding to archive
Examples:
# add whole "dir" to "test.zip" (when you open "test.zip" you will see only "dir")
zipHandle = zipfile.ZipFile('test.zip', 'w')
addDirToZip(zipHandle, 'dir')
zipHandle.close()
# add contents of "dir" to "test.zip" (when you open "test.zip" you will see only it's contents)
zipHandle = zipfile.ZipFile('test.zip', 'w')
addDirToZip(zipHandle, 'dir', 'dir')
zipHandle.close()
# add contents of "dir/subdir" to "test.zip" (when you open "test.zip" you will see only contents of "subdir")
zipHandle = zipfile.ZipFile('test.zip', 'w')
addDirToZip(zipHandle, 'dir/subdir', 'dir/subdir')
zipHandle.close()
# add whole "dir/subdir" to "test.zip" (when you open "test.zip" you will see only "subdir")
zipHandle = zipfile.ZipFile('test.zip', 'w')
addDirToZip(zipHandle, 'dir/subdir', 'dir')
zipHandle.close()
# add whole "dir/subdir" with full path to "test.zip" (when you open "test.zip" you will see only "dir" and inside it only "subdir")
zipHandle = zipfile.ZipFile('test.zip', 'w')
addDirToZip(zipHandle, 'dir/subdir')
zipHandle.close()
# add whole "dir" and "otherDir" (with full path) to "test.zip" (when you open "test.zip" you will see only "dir" and "otherDir")
zipHandle = zipfile.ZipFile('test.zip', 'w')
addDirToZip(zipHandle, 'dir')
addDirToZip(zipHandle, 'otherDir')
zipHandle.close()
"""
basePath = basePath.rstrip("\\/") + ""
basePath = basePath.rstrip("\\/")
for root, dirs, files in os.walk(path):
# add dir itself (needed for empty dirs
zipHandle.write(os.path.join(root, "."))
# add files
for file in files:
filePath = os.path.join(root, file)
inZipPath = filePath.replace(basePath, "", 1).lstrip("\\/")
#print filePath + " , " + inZipPath
zipHandle.write(filePath, inZipPath)
উপরে একটি সাধারণ ফাংশন যা সাধারণ ক্ষেত্রে কাজ করা উচিত। আপনি আমার গিস্টে আরও মার্জিত ক্লাসটি পেতে পারেন: https://gist.github.com/Eccenux/17526123107ca0ac28e6
আধুনিক পাইথন (৩.6+) pathlib
সংক্ষিপ্ত ওওপি -জাতীয় পাথ পরিচালনা করার জন্য এবং pathlib.Path.rglob()
পুনরাবৃত্ত গ্লোব্বিংয়ের জন্য মডিউলটি ব্যবহার করে । আমি যতদূর বলতে পারি এটি জর্জ ভি রিলির উত্তরের সমতুল্য: সংক্ষেপণের সাথে জিপস, শীর্ষতম উপাদানটি একটি ডিরেক্টরি, খালি ডায়ার রাখে, আপেক্ষিক পথ ব্যবহার করে।
from pathlib import Path
from zipfile import ZIP_DEFLATED, ZipFile
from os import PathLike
from typing import Union
def zip_dir(zip_name: str, source_dir: Union[str, PathLike]):
src_path = Path(source_dir).expanduser().resolve(strict=True)
with ZipFile(zip_name, 'w', ZIP_DEFLATED) as zf:
for file in src_path.rglob('*'):
zf.write(file, file.relative_to(src_path.parent))
দ্রষ্টব্য: যেমন optionচ্ছিক প্রকারের ইঙ্গিতগুলি নির্দেশ করে, zip_name
কোনও পাথ অবজেক্ট হতে পারে না ( এটি 3.6.2+ এ স্থির হবে )।
আমার কাছে আরও একটি কোড উদাহরণ রয়েছে যা পাইথন 3, প্যাথলিব এবং জিপ ফাইল ব্যবহার করে সহায়তা করতে পারে। এটি কোনও ওএসে কাজ করা উচিত।
from pathlib import Path
import zipfile
from datetime import datetime
DATE_FORMAT = '%y%m%d'
def date_str():
"""returns the today string year, month, day"""
return '{}'.format(datetime.now().strftime(DATE_FORMAT))
def zip_name(path):
"""returns the zip filename as string"""
cur_dir = Path(path).resolve()
parent_dir = cur_dir.parents[0]
zip_filename = '{}/{}_{}.zip'.format(parent_dir, cur_dir.name, date_str())
p_zip = Path(zip_filename)
n = 1
while p_zip.exists():
zip_filename = ('{}/{}_{}_{}.zip'.format(parent_dir, cur_dir.name,
date_str(), n))
p_zip = Path(zip_filename)
n += 1
return zip_filename
def all_files(path):
"""iterator returns all files and folders from path as absolute path string
"""
for child in Path(path).iterdir():
yield str(child)
if child.is_dir():
for grand_child in all_files(str(child)):
yield str(Path(grand_child))
def zip_dir(path):
"""generate a zip"""
zip_filename = zip_name(path)
zip_file = zipfile.ZipFile(zip_filename, 'w')
print('create:', zip_filename)
for file in all_files(path):
print('adding... ', file)
zip_file.write(file)
zip_file.close()
if __name__ == '__main__':
zip_dir('.')
print('end!')
আপনি সম্ভবত zipfile
মডিউলটি দেখতে চান ; http://docs.python.org/library/zipfile.html এ ডকুমেন্টেশন রয়েছে ।
আপনি os.walk()
ডিরেক্টরি কাঠামো সূচী করতে পারেন ।
এখানে নক্সের দেওয়া উত্তরের একটি পরিবর্তন রয়েছে যা আমার পক্ষে কাজ করে:
def WriteDirectoryToZipFile( zipHandle, srcPath, zipLocalPath = "", zipOperation = zipfile.ZIP_DEFLATED ):
basePath = os.path.split( srcPath )[ 0 ]
for root, dirs, files in os.walk( srcPath ):
p = os.path.join( zipLocalPath, root [ ( len( basePath ) + 1 ) : ] )
# add dir
zipHandle.write( root, p, zipOperation )
# add files
for f in files:
filePath = os.path.join( root, f )
fileInZipPath = os.path.join( p, f )
zipHandle.write( filePath, fileInZipPath, zipOperation )
নীচের একটিকে চেষ্টা করুন .এটি আমার জন্য কাজ করেছে ।
import zipfile, os
zipf = "compress.zip"
def main():
directory = r"Filepath"
toZip(directory)
def toZip(directory):
zippedHelp = zipfile.ZipFile(zipf, "w", compression=zipfile.ZIP_DEFLATED )
list = os.listdir(directory)
for file_list in list:
file_name = os.path.join(directory,file_list)
if os.path.isfile(file_name):
print file_name
zippedHelp.write(file_name)
else:
addFolderToZip(zippedHelp,file_list,directory)
print "---------------Directory Found-----------------------"
zippedHelp.close()
def addFolderToZip(zippedHelp,folder,directory):
path=os.path.join(directory,folder)
print path
file_list=os.listdir(path)
for file_name in file_list:
file_path=os.path.join(path,file_name)
if os.path.isfile(file_path):
zippedHelp.write(file_path)
elif os.path.isdir(file_name):
print "------------------sub directory found--------------------"
addFolderToZip(zippedHelp,file_name,path)
if __name__=="__main__":
main()
আপনি যদি কোনও সাধারণ গ্রাফিকাল ফাইল ম্যানেজারের সংকোচনের ফোল্ডারের মতো কোনও কার্যকারিতা চান তবে আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন, এটি জিপ ফাইল মডিউলটি ব্যবহার করে । এই কোডটি ব্যবহার করে আপনার কাছে এটির মূল ফোল্ডার হিসাবে জিপ ফাইল থাকবে।
import os
import zipfile
def zipdir(path, ziph):
# Iterate all the directories and files
for root, dirs, files in os.walk(path):
# Create a prefix variable with the folder structure inside the path folder.
# So if a file is at the path directory will be at the root directory of the zip file
# so the prefix will be empty. If the file belongs to a containing folder of path folder
# then the prefix will be that folder.
if root.replace(path,'') == '':
prefix = ''
else:
# Keep the folder structure after the path folder, append a '/' at the end
# and remome the first character, if it is a '/' in order to have a path like
# folder1/folder2/file.txt
prefix = root.replace(path, '') + '/'
if (prefix[0] == '/'):
prefix = prefix[1:]
for filename in files:
actual_file_path = root + '/' + filename
zipped_file_path = prefix + filename
zipf.write( actual_file_path, zipped_file_path)
zipf = zipfile.ZipFile('Python.zip', 'w', zipfile.ZIP_DEFLATED)
zipdir('/tmp/justtest/', zipf)
zipf.close()
আরও নমনীয়তা দেওয়ার জন্য, উদাহরণস্বরূপ নাম ব্যবহার করে ডিরেক্টরি / ফাইল নির্বাচন করুন:
import os
import zipfile
def zipall(ob, path, rel=""):
basename = os.path.basename(path)
if os.path.isdir(path):
if rel == "":
rel = basename
ob.write(path, os.path.join(rel))
for root, dirs, files in os.walk(path):
for d in dirs:
zipall(ob, os.path.join(root, d), os.path.join(rel, d))
for f in files:
ob.write(os.path.join(root, f), os.path.join(rel, f))
break
elif os.path.isfile(path):
ob.write(path, os.path.join(rel, basename))
else:
pass
একটি ফাইল ট্রি জন্য:
.
├── dir
│ ├── dir2
│ │ └── file2.txt
│ ├── dir3
│ │ └── file3.txt
│ └── file.txt
├── dir4
│ ├── dir5
│ └── file4.txt
├── listdir.zip
├── main.py
├── root.txt
└── selective.zip
আপনি উদাহরণস্বরূপ কেবলমাত্র dir4
এবং নির্বাচন করতে পারেন root.txt
:
cwd = os.getcwd()
files = [os.path.join(cwd, f) for f in ['dir4', 'root.txt']]
with zipfile.ZipFile("selective.zip", "w" ) as myzip:
for f in files:
zipall(myzip, f)
বা কেবল listdir
স্ক্রিপ্ট আহ্বান ডিরেক্টরিতে এবং সেখান থেকে সমস্ত কিছু যুক্ত করুন:
with zipfile.ZipFile("listdir.zip", "w" ) as myzip:
for f in os.listdir():
if f == "listdir.zip":
# Creating a listdir.zip in the same directory
# will include listdir.zip inside itself, beware of this
continue
zipall(myzip, f)
বলুন আপনি বর্তমান ডিরেক্টরিতে সমস্ত ফোল্ডার (উপ ডিরেক্টরি) জিপ করতে চান।
for root, dirs, files in os.walk("."):
for sub_dir in dirs:
zip_you_want = sub_dir+".zip"
zip_process = zipfile.ZipFile(zip_you_want, "w", zipfile.ZIP_DEFLATED)
zip_process.write(file_you_want_to_include)
zip_process.close()
print("Successfully zipped directory: {sub_dir}".format(sub_dir=sub_dir))
আর্কাইভ করার জন্য প্যারেন্ট ডিরেক্টরিতে ফোল্ডার হায়ারার্কি ধরে রাখার একটি সংক্ষিপ্ত উপায়ে:
import glob
import zipfile
with zipfile.ZipFile(fp_zip, "w", zipfile.ZIP_DEFLATED) as zipf:
for fp in glob(os.path.join(parent, "**/*")):
base = os.path.commonpath([parent, fp])
zipf.write(fp, arcname=fp.replace(base, ""))
আপনি যদি চান, আপনি pathlib
ফাইল গ্লোব্বিংয়ের জন্য এটি ব্যবহার করতে এটি পরিবর্তন করতে পারেন ।
এখানে অনেক উত্তর, এবং আমি আশা করি যে আমি আমার নিজস্ব সংস্করণে অবদান রাখতে পারি, যা মূল উত্তরের উপর ভিত্তি করে (উপায় দ্বারা) তবে আরও গ্রাফিকাল দৃষ্টিভঙ্গি সহ প্রতিটি zipfile
সেটআপ এবং বাছাইয়ের জন্য প্রসঙ্গ ব্যবহার করেos.walk()
অর্ডার আছে এ, অর্ডার আউটপুট।
এই ফোল্ডারগুলি এবং সেগুলির ফাইলগুলি (অন্যান্য ফোল্ডারগুলির মধ্যে) থাকায় আমি .zip
প্রতিটি cap_
ফোল্ডারের জন্য একটি তৈরি করতে চেয়েছিলাম :
$ tree -d
.
├── cap_01
| ├── 0101000001.json
| ├── 0101000002.json
| ├── 0101000003.json
|
├── cap_02
| ├── 0201000001.json
| ├── 0201000002.json
| ├── 0201001003.json
|
├── cap_03
| ├── 0301000001.json
| ├── 0301000002.json
| ├── 0301000003.json
|
├── docs
| ├── map.txt
| ├── main_data.xml
|
├── core_files
├── core_master
├── core_slave
প্রক্রিয়াটি আরও ভালভাবে বোঝার জন্য মন্তব্যে আমি এখানে যা প্রয়োগ করেছি তা এখানে।
$ cat zip_cap_dirs.py
""" Zip 'cap_*' directories. """
import os
import zipfile as zf
for root, dirs, files in sorted(os.walk('.')):
if 'cap_' in root:
print(f"Compressing: {root}")
# Defining .zip name, according to Capítulo.
cap_dir_zip = '{}.zip'.format(root)
# Opening zipfile context for current root dir.
with zf.ZipFile(cap_dir_zip, 'w', zf.ZIP_DEFLATED) as new_zip:
# Iterating over os.walk list of files for the current root dir.
for f in files:
# Defining relative path to files from current root dir.
f_path = os.path.join(root, f)
# Writing the file on the .zip file of the context
new_zip.write(f_path)
মূলত, প্রতিটি পুনরাবৃত্তির জন্য os.walk(path)
, আমি zipfile
সেটআপের জন্য একটি প্রসঙ্গ খুলছি এবং তারপরে, পুনরাবৃত্তির উপরে পুনরাবৃত্তি করছি files
যা ডিরেক্টরি list
থেকে একটি ফাইল যা root
বর্তমান root
ডিরেক্টরিটির উপর ভিত্তি করে প্রতিটি ফাইলের জন্য আপেক্ষিক পথ তৈরি করেzipfile
করে যা চলছে প্রসঙ্গে সংযুক্ত করা হচ্ছে ।
এবং আউটপুট এইভাবে উপস্থাপন করা হয়:
$ python3 zip_cap_dirs.py
Compressing: ./cap_01
Compressing: ./cap_02
Compressing: ./cap_03
প্রতিটি .zip
ডিরেক্টরিের সামগ্রী দেখতে , আপনি less
আদেশটি ব্যবহার করতে পারেন :
$ less cap_01.zip
Archive: cap_01.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
22017 Defl:N 2471 89% 2019-09-05 08:05 7a3b5ec6 cap_01/0101000001.json
21998 Defl:N 2471 89% 2019-09-05 08:05 155bece7 cap_01/0101000002.json
23236 Defl:N 2573 89% 2019-09-05 08:05 55fced20 cap_01/0101000003.json
-------- ------- --- -------
67251 7515 89% 3 files
প্যাথলিব এবং একটি প্রসঙ্গ পরিচালক ব্যবহার করে এখানে একটি আধুনিক পদ্ধতি। সাবফোল্ডার না করে সরাসরি জিপগুলিতে ফাইলগুলি রাখুন।
def zip_dir(filename: str, dir_to_zip: pathlib.Path):
with zipfile.ZipFile(filename, 'w', zipfile.ZIP_DEFLATED) as zipf:
# Use glob instead of iterdir(), to cover all subdirectories.
for directory in dir_to_zip.glob('**'):
for file in directory.iterdir():
if not file.is_file():
continue
# Strip the first component, so we don't create an uneeded subdirectory
# containing everything.
zip_path = pathlib.Path(*file.parts[1:])
# Use a string, since zipfile doesn't support pathlib directly.
zipf.write(str(file), str(zip_path))
আমি রেইমুন্ড এবং মর্টেন জিলমারের মন্তব্যে (আপেক্ষিক পথ এবং খালি ডিরেক্টরি সহ) মার্ক বাইয়ার্সের সমাধান একত্রিত করে একটি ফাংশন প্রস্তুত করেছি। সেরা অনুশীলন হিসাবে,with
জিপফাইলে ফাইল নির্মাণে ব্যবহৃত হয়।
ফাংশনটি জিপড ডিরেক্টরি নাম এবং '.zip' এক্সটেনশন সহ একটি ডিফল্ট জিপ ফাইলের নামও প্রস্তুত করে। সুতরাং, এটি কেবলমাত্র একটি যুক্তি দিয়ে কাজ করে: উত্স ডিরেক্টরিটি জিপ করা।
import os
import zipfile
def zip_dir(path_dir, path_file_zip=''):
if not path_file_zip:
path_file_zip = os.path.join(
os.path.dirname(path_dir), os.path.basename(path_dir)+'.zip')
with zipfile.ZipFile(path_file_zip, 'wb', zipfile.ZIP_DEFLATED) as zip_file:
for root, dirs, files in os.walk(path_dir):
for file_or_dir in files + dirs:
zip_file.write(
os.path.join(root, file_or_dir),
os.path.relpath(os.path.join(root, file_or_dir),
os.path.join(path_dir, os.path.pardir)))
# import required python modules
# You have to install zipfile package using pip install
import os,zipfile
# Change the directory where you want your new zip file to be
os.chdir('Type your destination')
# Create a new zipfile ( I called it myfile )
zf = zipfile.ZipFile('myfile.zip','w')
# os.walk gives a directory tree. Access the files using a for loop
for dirnames,folders,files in os.walk('Type your directory'):
zf.write('Type your Directory')
for file in files:
zf.write(os.path.join('Type your directory',file))
ঠিক আছে, পরামর্শগুলি পড়ার পরে আমি একটি খুব অনুরূপ পদ্ধতি নিয়ে এসেছি যা "মজার" ডিরেক্টরি নাম (পরম-জাতীয় নাম) তৈরি না করেই 2.7.x এর সাথে কাজ করে এবং কেবলমাত্র জিপের অভ্যন্তরে নির্দিষ্ট ফোল্ডারটি তৈরি করব।
অথবা কেবলমাত্র আপনার নির্বাচিত ডিরেক্টরিতে থাকা সামগ্রীর ভিতরে একটি ফোল্ডার অন্তর্ভুক্ত রাখতে আপনার জিপের প্রয়োজন।
def zipDir( path, ziph ) :
"""
Inserts directory (path) into zipfile instance (ziph)
"""
for root, dirs, files in os.walk( path ) :
for file in files :
ziph.write( os.path.join( root, file ) , os.path.basename( os.path.normpath( path ) ) + "\\" + file )
def makeZip( pathToFolder ) :
"""
Creates a zip file with the specified folder
"""
zipf = zipfile.ZipFile( pathToFolder + 'file.zip', 'w', zipfile.ZIP_DEFLATED )
zipDir( pathToFolder, zipf )
zipf.close()
print( "Zip file saved to: " + pathToFolder)
makeZip( "c:\\path\\to\\folder\\to\\insert\\into\\zipfile" )
জিপ ফাইল তৈরির কাজ।
def CREATEZIPFILE(zipname, path):
#function to create a zip file
#Parameters: zipname - name of the zip file; path - name of folder/file to be put in zip file
zipf = zipfile.ZipFile(zipname, 'w', zipfile.ZIP_DEFLATED)
zipf.setpassword(b"password") #if you want to set password to zipfile
#checks if the path is file or directory
if os.path.isdir(path):
for files in os.listdir(path):
zipf.write(os.path.join(path, files), files)
elif os.path.isfile(path):
zipf.write(os.path.join(path), path)
zipf.close()
make_archive
থেকে নীচে ব্যবহার করুনshutil
(যদি আপনি কোনও একক ডিরেক্টরিকে পুনরাবৃত্তভাবে জিপ করতে চান)।