Python中如何使用os模块和shutil模块处理文件和文件夹

简介: os和shutil都是Python标准库中用于处理文件和文件夹的模块,它们都提供了许多常用的文件和文件夹操作功能,但是它们的使用场景和优势有所不同。os模块和shutil模块各自具有不同的优势,可以根据实际需要选择使用。如果只需要对单个文件或目录进行基本的文件操作,可以使用os模块;如果需要复制或移动多个文件或目录,或者需要进行文件和目录的压缩和解压缩,就应该使用shutil模块。有些需求同时使用两者才能满足要求

bd5c8.jpeg

os和shutil都是Python标准库中用于处理文件和文件夹的模块,它们都提供了许多常用的文件和文件夹操作功能,但是它们的使用场景和优势有所不同。

os模块提供了许多操作系统相关的功能,例如打开文件、读取文件、获取文件属性、创建目录、删除文件、重命名文件等。os模块提供的函数通常操作单个文件或目录,但它不提供直接复制文件或目录的方法。如果需要在Python中复制文件或目录,就需要使用shutil模块。

shutil模块是在os模块的基础上开发的,提供了许多高级的文件和文件夹操作功能,例如复制文件、复制目录、移动文件、移动目录等。shutil模块比os模块更加高级、更加方便,可以用来处理一系列文件和文件夹操作,而不仅仅是单个文件或目录。同时,shutil模块也可以处理文件和目录的压缩和解压缩。

因此,os模块和shutil模块各自具有不同的优势,可以根据实际需要选择使用。如果只需要对单个文件或目录进行基本的文件操作,可以使用os模块;如果需要复制或移动多个文件或目录,或者需要进行文件和目录的压缩和解压缩,就应该使用shutil模块。有些需求同时使用两者才能满足要求,例如做一个文件同步的程序,需要满足如下要求:

  • 第一次运行时,所有文件都会从源路径复制到目标路径。
  • 只有当源文件比目标文件更新时,才复制选定的文件和选定的文件夹(以及所有子文件夹和文件)。
  • 后续运行时,只复制更新的文件和任何新添加到复制列表的文件。
  • 文件夹的结构需要保持不变,所以如果只复制某个文件夹,那么完整的结构也会被创建,但只包含该文件夹中的数据。

根据以上要求,可以提供程序如下:

importosimportshutil#定义源路径和目标路径src_base_path="/mnt/datalake"dst_base_path="/dst"#定义要复制的文件和文件夹列表copy_list= [
"Folder1/file2.csv",
"Folder1/file3.csv",
"Folder1/file4.csv",
"Folder4/Folder5/Folder7"]
#遍历要复制的列表foritemincopy_list:
#拼接完整的源路径和目标路径src_path=os.path.join(src_base_path, item)
dst_path=os.path.join(dst_base_path, item)
#如果是文件ifos.path.isfile(src_path):
#检查目标路径是否存在,如果不存在则创建dst_dir=os.path.dirname(dst_path)
ifnotos.path.exists(dst_dir):
os.makedirs(dst_dir)
#检查源文件是否比目标文件更新,或者目标文件不存在ifnotos.path.exists(dst_path) oros.path.getmtime(src_path) >os.path.getmtime(dst_path):
#复制文件,并保留元数据shutil.copy2(src_path, dst_path)
print(f"Copied file {src_path} to {dst_path}")
#如果是文件夹elifos.path.isdir(src_path):
#遍历源文件夹中的所有子文件夹和文件forroot, dirs, filesinos.walk(src_path):
#对于每个子文件夹和文件,拼接相对路径rel_path=os.path.relpath(root, src_path)
fordindirs:
sub_dir=os.path.join(rel_path, d)
#拼接完整的源路径和目标路径src_sub_dir=os.path.join(src_path, sub_dir)
dst_sub_dir=os.path.join(dst_path, sub_dir)
#检查目标路径是否存在,如果不存在则创建ifnotos.path.exists(dst_sub_dir):
os.makedirs(dst_sub_dir)
print(f"Created directory {dst_sub_dir}")
forfinfiles:
sub_file=os.path.join(rel_path, f)
#拼接完整的源路径和目标路径src_sub_file=os.path.join(src_path, sub_file)
dst_sub_file=os.path.join(dst_path, sub_file)
#检查源文件是否比目标文件更新,或者目标文件不存在ifnotos.path.exists(dst_sub_file) oros.path.getmtime(src_sub_file) >os.path.getmtime(dst_sub_file):
#复制文件,并保留元数据shutil.copy2(src_sub_file, dst_sub_file)
print(f"Copied file {src_sub_file} to {dst_sub_file}")

当发现文件目录或文件有创建或更新的时候进行远程传输,就可以实现一个云同步的文档管理程序。文件传输程序如下:

importrequests#亿牛云动态转发#爬虫加强版代理IP地址和端口号proxy_host='www.16yun.cn'proxy_port='31000'#爬虫加强版代理IP的用户名和密码,采用HTTP基本认证方式proxy_username='16IP'proxy_password='16YUN'#目标文件路径file_path='/path/to/your/file'#目标URL地址url='http://your-target-url.com'#构造HTTP代理的认证信息proxy_auth=requests.auth.HTTPProxyAuth(proxy_username, proxy_password)
#构造HTTP请求头,指定Content-Type为multipart/form-data,表示发送的数据为文件headers= {'Content-Type': 'multipart/form-data'}
#构造HTTP代理地址,格式为http://<username>:<password>@<host>:<port>/proxy_url=f'http://{proxy_username}:{proxy_password}@{proxy_host}:{proxy_port}/'#构造requests.Session对象,并设置爬虫加强版代理IP地址和端口号session=requests.Session()
session.proxies= {'http': proxy_url, 'https': proxy_url}
#打开文件,并将文件内容作为data参数发送POST请求withopen(file_path, 'rb') asf:
response=session.post(url, data=f, headers=headers, auth=proxy_auth)
#打印响应结果print(response.text)

结合上述两个程序,就可以轻松实现远程文件目录和文档的管理及同步。

相关文章
|
1月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
492 2
|
15天前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
|
18天前
|
安全 Python
告别 os.path 的繁琐:拥抱 Python 的 pathlib
告别 os.path 的繁琐:拥抱 Python 的 pathlib
296 6
|
2月前
|
缓存 数据可视化 Linux
Python文件/目录比较实战:排除特定类型的实用技巧
本文通过四个实战案例,详解如何使用Python比较目录差异并灵活排除特定文件,涵盖基础比较、大文件处理、跨平台适配与可视化报告生成,助力开发者高效完成目录同步与数据校验任务。
106 0
|
3月前
|
安全 Linux 网络安全
Python极速搭建局域网文件共享服务器:一行命令实现HTTPS安全传输
本文介绍如何利用Python的http.server模块,通过一行命令快速搭建支持HTTPS的安全文件下载服务器,无需第三方工具,3分钟部署,保障局域网文件共享的隐私与安全。
668 0
|
2月前
|
Web App开发 缓存 Rust
|
2月前
|
Ubuntu Unix Linux
操作系统的最强入门科普(Unix/Linux篇)
下期文章,小枣君会重点聊聊Windows和macOS那条线。敬请关注! 如果大家觉得文章不错,还请帮忙多多转发!谢谢!
|
11月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
496 0
Vanilla OS:下一代安全 Linux 发行版
|
8月前
|
运维 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot 是阿里云推出的一款操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行和系统运维调优等功能。通过简单的命令行操作,用户可以快速获取所需信息并执行任务,极大提升了Linux系统的使用效率。安装步骤简单,只需在阿里云服务器上运行几条命令即可完成部署。使用过程中,OS Copilot不仅能帮助查找命令,还能处理文件和复杂场景,显著节省了查找资料的时间。体验中发现,部分输出格式和偶尔出现的英文提示有待优化,但整体非常实用,特别适合Linux初学者。
397 10
|
9月前
|
弹性计算 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot是由阿里云推出的操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行等功能,极大提升了Linux系统的使用效率。用户只需通过简单的命令或自然语言描述问题,OS Copilot即可快速提供解决方案并执行相应操作。例如,查询磁盘使用量等常见任务变得轻松快捷。此外,它还支持从文件读取复杂任务定义,进一步简化了操作流程。虽然在某些模式下可能存在小问题,但总体上大大节省了学习和操作时间,提高了工作效率。
309 2
OS Copilot-操作系统智能助手-Linux新手小白的福音