【Class 39】《Python编程快速上手》 查缺补漏六 第九章 组织文件

1. Shutil 模块

shutil(或称为 shell 工具)模块中包含一些函数,让你在 Python 程序中复制、移动、改名和删除文件。

shutil.copy(source, destination): 复制文件
shutil.copytree(source, destination): 将复制整个文件夹,以及它包含的文件夹和文件
shutil.move(source, destination):文件和文件夹的移动与改名
shutil.rmtree(path):将删除 path 处的文件夹,它包含的所有文件和文件夹都会被删除
os.unlink(path) : 删除文件

2. send2trash.send2trash ( source ) 安全删除

因为 Python 内建的 shutil.rmtree()函数不可恢复地删除文件和文件夹,所以 用起来可能有危险。
删除文件和文件夹的更好方法,是使用第三方的 send2trash 模块

利用 send2trash,比 Python 常规的删除函数要安全得多,
因为它会将文件夹和文件发送到计算机的垃圾箱或回收站,而不是永久删除它们。
如果因程序缺陷而用send2trash 删除了某些你不想删除的东西,稍后可以从垃圾箱恢复。

首先安装模块:

C:\Users\Administrator>pip install send2trash
Collecting send2trash
  Downloading https://files.pythonhosted.org/packages/49/46/c3dc27481d1cc57b9385aff41c474ceb7714f7935b1247194adae45db714/Send2Trash-1.5.0-py3-none-any.whl
Installing collected packages: send2trash
Successfully installed send2trash-1.5.0

C:\Users\Administrator>

使用实例如下:

>>> import send2trash
>>> baconFile = open('bacon.txt', 'a') # creates the file
>>> baconFile.write('Bacon is not a vegetable.')
25
>>> baconFile.close()
>>> send2trash.send2trash('bacon.txt')

3. os.walk( ) 遍历目录树

os.walk()在循环的每次迭代中,返回 3 个值:
1.当前文件夹名称的字符串。
2.当前文件夹中子文件夹的字符串的列表。
3.当前文件夹中文件的字符串的列表
通常使用 foldername、subfolders 和 filenames。

实例:

import os
for folderName, subfolders, filenames in os.walk('C:\\delicious'):
	 print('The current folder is ' + folderName)
	 for subfolder in subfolders:
	 	print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
	 for filename in filenames:
 		print('FILE INSIDE ' + folderName + ': '+ filename)
	 print('')

print(list(os.walk('.')))

运行结果为:
。。。忽略很多数据。。。
The current folder is .\test_dir\sub_dir_1_4\sub_dir_2_28
FILE INSIDE .\test_dir\sub_dir_1_4\sub_dir_2_28: Test_File_45.txt
FILE INSIDE .\test_dir\sub_dir_1_4\sub_dir_2_28: Test_File_46.txt
FILE INSIDE .\test_dir\sub_dir_1_4\sub_dir_2_28: Test_File_47.txt
FILE INSIDE .\test_dir\sub_dir_1_4\sub_dir_2_28: Test_File_48.txt
FILE INSIDE .\test_dir\sub_dir_1_4\sub_dir_2_28: Test_File_49.txt

[('.', ['result', 'test_dir'], ['find_grep_str.py']), ('.\\result', [], ['rex.txt', 'str.txt']), ('.\\test_dir', ['sub_dir_1_0', 'sub_dir_1_1', 'sub_dir_1_2', 'sub_dir_1_3', 'sub_dir_1_4'], ['Test_File_0.txt', 'Test_File_1.txt', 'Test_File_2.txt', 'Test_File_3.txt', 'Test_File_4.txt'])]

4. zipfile

  1. 读取 ZIP 文件
    首先必须创建一个 ZipFile 对象(请注意大写首字母 Z和 F)。
    调用 zipfile.ZipFile()函数,向它传入一个字符串,表示.zip 文件的文件名。

注意,zipfile 是 Python 模块的名称,ZipFile()是函数的名称。

>>> import zipfile, os
>>> os.chdir('C:\\') # move to the folder with example.zip
>>> exampleZip = zipfile.ZipFile('example.zip')
>>> exampleZip.namelist()
['spam.txt', 'cats/', 'cats/catnames.txt', 'cats/zophie.jpg']
>>> spamInfo = exampleZip.getinfo('spam.txt')
>>> spamInfo.file_size
13908
>>> spamInfo.compress_size
3828
>>> 'Compressed file is %sx smaller!' % (round(spamInfo.file_size / spamInfo.compress_size, 2))
'Compressed file is 3.63x smaller!'
>>> exampleZip.close()

exampleZip.namelist(“xxxx”) :返回 ZIP 文件中包含的所有文件和文件夹的字符串的列表。
exampleZip.getinfo(“xxxx”):返回一个关于特定文件的 ZipInfo 对象。
ZipInfo 对象有自己的属性,诸如表示字节数的 file_size和 compress_size,它们分别表示原来文件大小和压缩后文件大小。
ZipFile 对象表示整个归档文件,而 ZipInfo 对象则保存该归档文件中每个文件的有用信息。
计算压缩效率:

  1. 从zip文件中解压缩

extractall(“xxxx”) :解压所有文件 到 xxx 目录中
extract(“xxx”): 解压压缩包中的 xxx 文件出来

ZipFile 对象的 extractall()方法从 ZIP 文件中解压缩所有文件和文件夹,放到当前工作目录中
可以向extractall()传递的一个文件夹名称,它将文件解压缩到那个文件夹,而不是当前工作目录。
如果传递给 extractall()方法的文件夹不存在,它会被创建。

>>> import zipfile, os
>>> os.chdir('C:\\') # move to the folder with example.zip
>>> exampleZip = zipfile.ZipFile('example.zip')
>>> exampleZip.extractall()
>>> exampleZip.close()

>>> exampleZip.extract('spam.txt')
'C:\\spam.txt'
>>> exampleZip.extract('spam.txt', 'C:\\some\\new\\folders')
'C:\\some\\new\\folders\\spam.txt'
>>> exampleZip.close()

  1. 创建和添加到ZIP文件
>>> import zipfile
>>> newZip = zipfile.ZipFile('new.zip', 'w')
>>> newZip.write('spam.txt', compress_type=zipfile.ZIP_DEFLATED)
>>> newZip.close()

要创建你自己的压缩 ZIP 文件,必须以“写模式”打开 ZipFile 对象,即传入’w’作为第二个参数(这类似于向 open()函数传入’w’,以写模式打开一个文本文件).
如果向 ZipFile 对象的 write()方法传入一个路径,Python 就会压缩该路径所指的文件,将它加到 ZIP 文件中。

write()方法的第一个参数是一个字符串,代表要添加的文件名。第二个参数是“压缩类型”参数,它告诉计算机使用怎样的算法来压
缩文件。可以总是将这个值设置为 zipfile.ZIP_DEFLATED(这指定了 deflate 压缩算法,它对各种类型的数据都很有效)。

就像写入文件一样,写模式将擦除 ZIP 文件中所有原有的内容。
如果只是希望将文件添加到原有的 ZIP 文件中,就要向 zipfile.ZipFile()传入’a’作为第二个参数,以添加模式打开 ZIP 文件

你可能感兴趣的:(Python总结)