Byte of Python学习笔记(1)——Zipfile练习
最近开始学习Python,先看了一些廖雪峰,看到单元测试的部分渐渐觉得有些吃力,然后在知乎上发现大多数人都在推荐使用Byte of Python进行入门,即简明Python教程。进行了一部分阅读之后发现这本书确实很适合入门。因此推荐先看一下这本书对python进行初步的了解,本人水平有限,现将学习过程中的一些心得记录如下, 希望各位看到这篇文章的大佬对不正确的地方进行批评指正。在此谢过。
在此贴出本书的在线阅读地址:https://www.gitbook.com/book/lenkimo/byte-of-python-chinese-edition/details
感谢大佬的无私奉献:https://zhuanlan.zhihu.com/p/24672770
前面的基础知识比较易懂,在阅读到解决问题的部分时,书中以常见的Zip命令为例,编写了数个版本的程序,其中前面几个版本的程序均使用了zip命令, 由于本人目前使用的平台还是windows,在windows平台使用zip命令需要首先安装GnuWin32,并且使用了os.system运行shell命令,多有不便,在书中也提出了使用内置的zipfile模块进行压缩,书中并没有给出代码,因此提供我的代码如下:
1 import zipfile 2 import os 3 import time 4 5 source = [r'F:\\PythonTest\Mytestdata'] #需要进行压缩的目录 6 if not os.path.exists(source[0]): 7 print('The path is not exist!') 8 target_dir = r'F:\\PythonTest\Zipbackup' #压缩包存放的地址 9 if not os.path.exists(target_dir): 10 os.mkdir(target_dir) 11 12 target_name = target_dir +os.sep+time.strftime('%Y%m%d')+'_backup.zip' #压缩包名,以当前日期命名 13 myzip = zipfile.ZipFile(target_name,'w') #创建压缩包 14 for current_path, dirnames, filesname in os.walk(source[0]): #通过os.walk对目标路径内所有文件进行遍历 15 for file in filesname: 16 target_path = current_path.split('\\')[3:] #切片 17 target_path = '\\'.join(target_path) 18 target_path = target_path+os.sep+file #压缩包内的文件存放路径 19 # target_path = file 20 myzip.write((os.path.join(current_path,file)),target_path) #写入压缩文件 21 print('Zipping: %s' %os.path.join(current_path,file)) 22 print('Zip success!') 23 myzip.close() #释放资源
Zipfile不同于GnuWin32中的zip命令,不能直接将一个文件夹内的文件用一行语句全部压缩,因此需要使用os.walk进行遍历,os.walk返回一个三维元组,分别是起始路径,起始路径下的文件夹,以及起始路径内的文件。
在这里我使用了一个切片的操作,是因为我的压缩的路径是F:\\PythonTest\Mytestdata,而我希望将压缩包内含的文件从MyTestdata开始,如果不使用切片操作的话,压缩包会将MyPythonTest文件夹也包含在内。
调用zipfile.write对压缩包进行压缩的操作,官方文档中对该函数的解释如下:
可知write函数中的第二个参数为压缩后的目标路径,通过修改这个参数可以修改他的名称和路径。
另外还使用了time模块中的strftimr函数,用来输出当前的时间,有关该函数,需要注意的就是他的一些输出格式,如下:
还有一个需要注意的问题即是斜杠的问题,在windows中使用的是“\”进行分割,而在Linux系统中使用的则是"/"。为了避免混淆,可以使用os.sep,可以自动根据当前的系统输出斜杠。另外注意在输入字符串的时候,请注意斜杠的输入,应为‘\\’输出一个斜杠,注意转义字符,或者在字符串前面加r,使其不进行转义。
运行之后的输出如下:
Zipping: F:\\PythonTest\Mytestdata\图片\test.JPG Zipping: F:\\PythonTest\Mytestdata\音乐\まふまふ - 病名は愛だった.mp3 Zip success!