《Python编程实训快速上手》第八天--组织文件

一、shutil模块

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

1、复制文件和文件夹

|--------|-------------|---------------------------------|----------------------------------------------------------|
| source | destination | destination存在 | destination不存在 |
| 文件 | 文件 | 将 source 文件复制并覆盖 destination 文件 | 复制 source 文件并重命名为 destination |
| 文件 | 目录 | 将 source 文件复制到 destination 目录中 | 会抛出错误(因为目标目录不存在) |
| 目录 | 文件 | 无此情况 | 无此情况 |
| shutil.copytree(source, destination) ||||
| 目录 | 目录 | 报错(destination 目录必须为不存在的新目录) | 复制整个 source 目录及其内容到 destination,并创建 destination 目录 |

python 复制代码
shutil.copytree(r"E:\test", Path.cwd()/"newText")
shutil.copy(r"E:\test.txt", Path.cwd()/"newText.txt")

2、 文件和文件夹的移动与重命名

|--------|-------------|------------------------------------|-------------------------------------------------------------------------------------------|
| source | destination | destination存在 | destination不存在 |
| 文件 | 文件 | 将 source 文件移动并覆盖 destination 文件 | 将 source 文件重命名为 destination 并移动到目标位置 |
| 文件 | 目录 | 将 source 文件移动到 destination 目录中 | * 只有最后一级目录不存在: 将source文件重命名为destination目录名(无文件扩展名的文本文件)---bug * 中间级目录也有不存在:报错 |
| 目录 | 文件 | 无此情况 | 无此情况 |
| 目录 | 目录 | 将 source 目录及其内容移动到 destination 目录中 | 将 source 目录及其内容重命名为 destination 并移动到目标路径 |
[shutil.move(source, destination)]

3、永久删除文件和文件夹

利用os模块中的函数,可以删除一个文件或一个空文件夹。利用shutil模块,可以删除一个文件夹及其所有的内容。

  • 调用os.unlink(path)将删除path处的文件。
  • 调用os.rmdir(path)将删除path处的文件夹。该文件夹必须为空,其中不能有任何文件和文件夹。
  • 调用shutil.rmtree(path)将删除path处的文件夹,它包含的所有文件和文件夹都会被删除。

小tips:为了防止误删文件,可以在第一次运行程序时注释掉这些调用,并且加上print()调用,显示会被删除的文件。

python 复制代码
from pathlib import Path
for filename in Path.home().glob('*.rxt'):
    #os.unlink(filename)
    print(filename)

4、用send2trash模块安全地删除

send2trash会将文件夹和文件发送到计算机的回收站,而不是永久删除它们。

使用**send2trash.send2trash(路径)**函数来删除文件和文件夹。

二、遍历目录树

使用os.walk()函数,该函数被传入一个字符串值,即一个文件夹的路径。可以在一个for循环语句中使用os.walk()函数遍历目录树,os.walk()在循环的每次迭代中返回以下3个值:

  • 当前文件夹名称的字符串,是绝对路径
  • 当前文件夹中子文件夹的字符串的列表
  • 当前文件夹中文件的字符串的列表

遍历文件夹顺序是从上往下

python 复制代码
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('')

三、 用zipfile模块压缩文件

在ZipFile对象中完成

1、读取ZIP文件

调用zipfile.ZipFile()函数创建ZipFile对象,向它传入一个字符串,表示ZIP文件的文件名。

|---------------|----------------------------------------------------------|
| namelist() | 返回ZIP文件中包含的所有文件和文件夹的字符串的列表 |
| getinfo() | 返回一个关于特定文件的ZipInfo对象,传入字符串必须匹配namelist()返回的字符串列表中的一个 |
| ZipInfo对象属性 ||
| file_size | 原来文件大小 |
| compress_size | 压缩后文件大小 |
[ZipFile对象属性及其方法]

python 复制代码
import zipfile

exampleZip = zipfile.ZipFile(r'E:\example.zip')
print(exampleZip.namelist())
catsInfo = exampleZip.getinfo("example/cats/catnames.txt")
print(catsInfo.file_size)
print(catsInfo.compress_size)


>> ['example/', 'example/cats/', 'example/cats/catnames.txt', 'example/cats/zophie.jpg', 'example/spam.txt']
>> 260
>> 198

2、从ZIP文件中解压缩

|--------------|-----------------------------------------------------------------------------------------------------------------|
| extractall() | * 空白:从ZIP文件中解压缩所有文件和文件夹,并将其放到当前工作目录中 * 传文件夹:从ZIP文件中解压缩所有文件和文件夹,并将其解压缩到那个文件夹 |
| extract() | 从ZIP文件中解压缩单个文件或目录。 * 参数1:解压缩对象,传入字符串必须匹配namelist()返回的字符串列表中的一个 * 参数2:将文件解压缩到指定的文件夹,而不是当前工作目录。如果指定的文件夹不存在,就会创建 |

3、创建和添加到ZIP文件

1)创建

以"w"模式打开ZipFile对象,使用write()方法压缩,该方法有两个参数:

  • 参数1:指定需要压缩文件的路径
  • 参数2:指定压缩算法,常用zipfile.ZIP_DEFLATED

注意,write()方法在处理文件夹路径时只会创建一个空的文件夹条目,并不会自动递归地压缩文件夹内的所有内容。

2)添加

"a"模式打开ZipFile对象

python 复制代码
exampleZip = zipfile.ZipFile(r'open.zip',"w")
print(exampleZip.namelist())
exampleZip.write(r"E:\example\spam.txt",compress_type=zipfile.ZIP_DEFLATED)
exampleZip.close()

如果想将一个目录中所有内容全部压缩,用os.walk()来遍历文件夹结构并手动添加每个文件:

python 复制代码
with zipfile.ZipFile('new.zip', 'w') as newZip:
    for foldername, subfolders, filenames in os.walk(r"E:\example"):
        for filename in filenames:
            file_path = os.path.join(foldername, filename)
            newZip.write(file_path, compress_type=zipfile.ZIP_DEFLATED)
相关推荐
程序猿000001号8 分钟前
使用Python的Seaborn库进行数据可视化
开发语言·python·信息可视化
API快乐传递者17 分钟前
Python爬虫获取淘宝详情接口详细解析
开发语言·爬虫·python
公众号Codewar原创作者19 分钟前
R数据分析:工具变量回归的做法和解释,实例解析
开发语言·人工智能·python
FL162386312924 分钟前
python版本的Selenium的下载及chrome环境搭建和简单使用
chrome·python·selenium
巫师不要去魔法部乱说28 分钟前
PyCharm专项训练5 最短路径算法
python·算法·pycharm
Chloe.Zz35 分钟前
Python基础知识回顾
python
骑个小蜗牛39 分钟前
Python 标准库:random——随机数
python
Trouvaille ~1 小时前
【机器学习】从流动到恒常,无穷中归一:积分的数学诗意
人工智能·python·机器学习·ai·数据分析·matplotlib·微积分
是十一月末1 小时前
Opencv实现图像的腐蚀、膨胀及开、闭运算
人工智能·python·opencv·计算机视觉
云空1 小时前
《探索PyTorch计算机视觉:原理、应用与实践》
人工智能·pytorch·python·深度学习·计算机视觉