本文解释了如何使用简单的python程序对zip文件执行各种操作。
什么是压缩文件?
ZIP是一种支持无损数据压缩的归档文件格式。所谓无损压缩,我们的意思是压缩算法允许从压缩数据中完美地重建原始数据。因此,ZIP文件是包含一个或多个压缩文件的单个文件,它提供了一种理想的方法,可以使大文件变小,并将相关文件放在一起。
为什么我们需要压缩文件?
- 以减少存储需求。
- 以提高标准连接的传输速度。
为了使用python处理zip文件,我们将使用一个名为 zipfile .
1.提取zip文件
# importing required modules from zipfile import ZipFile # specifying the zip file name file_name = "my_python_files.zip" # opening the zip file in READ mode with ZipFile(file_name, 'r' ) as zip : # printing all the contents of the zip file zip .printdir() # extracting all the files print ( 'Extracting all the files now...' ) zip .extractall() print ( 'Done!' ) |
上述程序在与此python脚本相同的目录中提取一个名为“my_python_files.zip”的zip文件。 上述程序的输出可能如下所示:
让我们试着分块理解上面的代码:
-
from zipfile import ZipFile
ZipFile是一类ZipFile模块,用于读取和写入zip文件。这里我们只从ZipFile模块导入类ZipFile。
-
with ZipFile(file_name, 'r') as zip:
这里,ZipFile对象是通过调用ZipFile构造函数生成的,该构造函数接受zip文件名和模式参数。我们在中创建一个ZipFile对象 阅读 模式并将其命名为 拉链 .
-
zip.printdir()
printdir() 方法打印存档的目录。
-
zip.extractall()
拔取 方法将zip文件的所有内容提取到当前工作目录。你也可以打电话 摘录() 方法通过在zip文件中指定其路径来提取任何文件。 例如:
zip.extract('python_files/python_wiki.txt')
这将仅提取指定的文件。
如果你想读一些特定的文件,你可以这样做:
data = zip.read(name_of_file_to_read)
2.写入zip文件
考虑具有这样一种格式的目录(文件夹):
在这里,我们需要对整个目录及其子目录进行爬网,以便在将它们写入zip文件之前获得所有文件路径的列表。 以下程序通过对要压缩的目录进行爬网来实现这一点:
# importing required modules from zipfile import ZipFile import os def get_all_file_paths(directory): # initializing empty file paths list file_paths = [] # crawling through directory and subdirectories for root, directories, files in os.walk(directory): for filename in files: # join the two strings in order to form the full filepath. filepath = os.path.join(root, filename) file_paths.append(filepath) # returning all file paths return file_paths def main(): # path to folder which needs to be zipped directory = './python_files' # calling function to get all file paths in the directory file_paths = get_all_file_paths(directory) # printing the list of all files to be zipped print ( 'Following files will be zipped:' ) for file_name in file_paths: print (file_name) # writing files to a zipfile with ZipFile( 'my_python_files.zip' , 'w' ) as zip : # writing each file one by one for file in file_paths: zip .write( file ) print ( 'All files zipped successfully!' ) if __name__ = = "__main__" : main() |
上述程序的输出如下所示:
让我们试着通过将代码分成几个片段来理解上面的代码:
-
def get_all_file_paths(directory): file_paths = [] for root, directories, files in os.walk(directory): for filename in files: filepath = os.path.join(root, filename) file_paths.append(filepath) return file_paths
首先,为了获取目录中的所有文件路径,我们创建了这个函数,它使用 操作系统。步行 方法在每次迭代中,该目录中的所有文件都会附加到一个名为 文件路径 . 最后,我们返回所有文件路径。
-
file_paths = get_all_file_paths(directory)
在这里,我们传递要压缩到 获取所有文件路径() 函数并获取包含所有文件路径的列表。
-
with ZipFile('my_python_files.zip','w') as zip:
这里,我们这次在写模式下创建一个ZipFile对象。
-
for file in file_paths: zip.write(file)
在这里,我们使用 写 方法
3.获取有关zip文件的所有信息
# importing required modules from zipfile import ZipFile import datetime # specifying the zip file name file_name = "example.zip" # opening the zip file in READ mode with ZipFile(file_name, 'r' ) as zip : for info in zip .infolist(): print (info.filename) print ( ' Modified: ' + str (datetime.datetime( * info.date_time))) print ( ' System: ' + str (info.create_system) + '(0 = Windows, 3 = Unix)' ) print ( ' ZIP version: ' + str (info.create_version)) print ( ' Compressed: ' + str (info.compress_size) + ' bytes' ) print ( ' Uncompressed: ' + str (info.file_size) + ' bytes' ) |
上述程序的输出可能如下所示:
for info in zip.infolist():
在这里 信息列表() 方法创建 ZipInfo 类,该类包含有关zip文件的所有信息。 我们可以访问所有信息,如文件的最后修改日期、文件名、创建文件的系统、Zip版本、压缩和未压缩格式的文件大小等。
本文由 尼希尔·库马尔 .如果你喜欢GeekSforgeks并想贡献自己的力量,你也可以用write写一篇文章。极客。组织或邮寄你的文章进行评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。