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月前
|
Python
Python Internet 模块
Python Internet 模块。
124 74
|
3天前
|
缓存 安全 Linux
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
44 23
|
2月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
129 63
|
12天前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
24 3
|
2月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
3月前
|
Shell Python
Python 的 os 库的应用实例
Python 的 os 库的应用实例
44 3
|
6月前
|
Python
Python基本文件操作及os库
以上仅为Python文件操作和os库的基本用法,实际使用中需要根据具体需求进行调整。
42 1
|
7月前
|
Python
Python中使用os库管理环境变量
在Python中,可以使用os库来管理操作系统的环境变量。通过os.environ对象,我们可以获取、修改和删除环境变量的值。
141 3
|
7月前
|
数据采集 Python
Python的第三方库OS库
Python的第三方库OS库
85 0
|
Unix API 调度
【python】 一文了解 OS 操作系统交互库简单使用方法
Python的os模块(Operating System Interface)提供了访问操作系统相关功能的接口,它允许程序与底层操作系统交互,对文件系统、进程、套接字等底层操作进行控制。典型的用法是程序打开某个文件时,os库可以帮助我们判断文件是否存在/是否可读/是否可写等等,同时也可以帮助我们创建和删除目录、文件链接等等。os库提供了一系列的函数和方法,用于处理和管理操作系统文件、文件夹,以及运行和控制进程,具体包括以下功能:对文件和目录(文件夹)的操作:包括创建、重命名、删除等等。
349 0