您的位置 首页 > 数码极客

[如何将文件夹复制到压缩包]文件夹如何变成压缩包

假定你正在做一个项目,它的文件保存在C:\AlspythonBook 文件夹中。你担心工作

会丢失,所以希望为整个文件夹创建一个ZIP 文件,作为“快照”。你希望保存不同的版

本,希望 ZIP 文件的文件名每次创建时都有所变化。例如 Al、

Al、Al,等等。你可以手工完成,但这有点烦人,

而且可能不小心弄错ZIP 文件的编号。运行一个程序来完成这个烦人的任务会简单得多。

针对这个项目,打开一个新的文件编辑器窗口,将它保存为 backu。

第 1 步:弄清楚 ZIP 文件的名称

这个程序的代码将放在一个名为 backupToZip()的函数中。这样就更容易将该函

数复制粘贴到其他需要这个功能的 Python 程序中。在这个程序的末尾,会调用这个

函数进行备份。让你的程序看起来像这样:

#! python3

# backu - Copies an entire folder and its contents into

# a ZIP file whose filename increments.

 import zipfile, os

def backupToZip(folder):

# Backup the entire contents of "folder" into a ZIP file.

folder = os.(folder) # make sure folder is absolute

# Figure out the filename this code should use based on

# what files already exist.

 number = 1

 while True:

zipFilename = os.(folder) + '_' + str(number) + '.zip'

if not os.(zipFilename):

第 9 章 组织文件 169

break

number = number + 1

 # TODO: Create the ZIP file.

# TODO: Walk the entire folder tree and compress the files in each folder.

print('Done.')

backupToZip('C:\\delicious')

先完成基本任务:添加#!行,描述该程序做什么,并导入 zipfile 和 os 模块。

定义 backupToZip()函数,它只接收一个参数,即 folder。这个参数是一个字符

串路径,指向需要备份的文件夹。该函数将决定它创建的 ZIP 文件使用什么文件名,

然后创建该文件,遍历 folder 文件夹,将每个子文件夹和文件添加到 ZIP 文件中。

在源代码中为这些步骤写下 TODO 注释,提醒你稍后来完成。

第一部分命名这个 ZIP 文件,使用 folder 的绝对路径的基本名称。如果要备份

的文件夹是 C:\delicious,ZIP 文件的名称就应该是 deliciou,第一次运行该程

序时 N=1,第二次运行时 N=2,以此类推。

通过检查 deliciou 是否存在,然后检查 deliciou 是否存在,继续下

去,可以确定 N 应该是什么。用一个名为 number 的变量表示 N,在一个循环内

不断增加它,并调用 os.()来检查该文件是否存在。第一个不存在的文件

名将导致循环 break,因此它就发现了新 ZIP 文件的文件名。

第 2 步:创建新 ZIP 文件

接下来让我们创建 ZIP 文件。让你的程序看起来像这样:

#! python3

# backu - Copies an entire folder and its contents into

# a ZIP file whose filename increments.

--snip--

while True:

zipFilename = os.(folder) + '_' + str(number) + '.zip'

if not os.(zipFilename):

break

number = number + 1

# Create the ZIP file.

print('Creating %s...' % (zipFilename))

 backupZip = zi(zipFilename, 'w')

# TODO: Walk the entire folder tree and compress the files in each folder.

print('Done.')

backupToZip('C:\\delicious')

既然新 ZIP 文件的文件名保存在 zipFilename 变量中,你就可以调用

zi(),实际创建这个 ZIP 文件。确保传入'w'作为第二个参数,这样 ZIP

170 Python 编程快速上手——让繁琐工作自动化

文件以写模式打开。

第 3 步:遍历目录树并添加到 ZIP 文件

现在需要使用 os.walk()函数,列出文件夹以及子文件夹中的每个文件。让你的

程序看起来像这样:

#! python3

# backu - Copies an entire folder and its contents into

# a ZIP file whose filename increments.

--snip--

# Walk the entire folder tree and compress the files in each folder.

 for foldername, subfolders, filenames in os.walk(folder):

print('Adding files in %s...' % (foldername))

# Add the current folder to the ZIP file.

 backu(foldername)

# Add all the files in this folder to the ZIP file.

 for filename in filenames:

newBase / os.(folder) + '_'

if (newBase) and ('.zip')

continue # don't backup the backup ZIP files

backu(foldername, filename))

backu()

print('Done.')

backupToZip('C:\\delicious')

可以在 for 循环中使用 os.walk(),在每次迭代中,它将返回这次迭代当前的

文件夹名称、这个文件夹中的子文件夹,以及这个文件夹中的文件名。

在这个 for 循环中,该文件夹被添加到 ZIP 文件。嵌套的 for 循环将遍历

filenames 列表中的每个文件。每个文件都被添加到 ZIP 文件中,以前生成的备份

ZIP 文件除外。

如果运行该程序,它产生的输出看起来像这样:

Creating deliciou...

Adding files in C:\delicious...

Adding files in C:\delicious\cats...

Adding files in C:\delicious\waffles...

Adding files in C:\delicious\walnut...

Adding files in C:\delicious\walnut\waffles...

Done.

第二次运行它时,它将 C:\delicious 中的所有文件放进一个 ZIP 文件,命名为

deliciou,以此类推。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何将文件夹复制到压缩包,文件夹如何变成压缩包,怎么把文件夹复制到压缩包里,复制文件夹和复制压缩包哪个快”边界阅读