python的OS模块和shutil模块使用

一. OS模块

  os 模块提供了一个与操作系统交互的接口,可以用来处理文件和目录的路径、创建和删除目录、执行系统命令、获取和修改环境变量等操作。

1.文件和目录操作

1.1 获取当前工作目录
import os

current_dir = os.getcwd()
print(current_dir)  # 输出当前工作目录

os.getcwd() 用于获取当前工作目录。

1.2 改变工作目录
import os

os.chdir(r'C:\Users\31052\Desktop') # 切换到指定目录
current_dir = os.getcwd()
print(current_dir) # 验证当前工作目录已改变

os.chdir(path) 用于改变当前的工作目录。

1.3 创建目录和删除目录
  • 创建目录
import os

os.mkdir('new_dir')  # 创建一个新目录
  • 递归创建多级目录
os.makedirs('parent/child', exist_ok=True)  # 创建父子目录,exist_ok=True 如果目录已存在不会抛出异常
  • 删除空目录
os.rmdir('empty_dir')  # 删除空目录
  • 删除多级空目录
os.removedirs('parent/child')  # 如果是空目录,会递归删除父目录
1.4 列出目录内容
import os

files = os.listdir('/path/to/directory')
print(files)  # 返回目录下所有文件和子目录的名称列表

os.listdir(path) 返回指定目录中的所有文件和子目录。

1.5 判断文件路径是否存在
import os

print(os.path.exists('some_path'))  # 检查路径是否存在
1.6 获取文件和目录的详细信息
  • 获取文件的大小
import os
size = os.path.getsize('file.txt')
print(f"文件大小: {size} 字节")
  • 获取文件的最后修改时间
import os
last_modified_time = os.path.getmtime('file.txt')
print(f"文件最后修改时间: {last_modified_time}")

2. 文件路径操作

2.1 拼接文件路径
import os
path = os.path.join('folder', 'subfolder', 'file.txt')
print(path)  # 输出:folder/subfolder/file.txt

os.path.join() 用于将多个路径组合成一个完整路径。

2.2 判断路径类型
  • 是否为文件
import os
print(os.path.isfile('file.txt'))  # 判断路径是否为文件
  • 是否为目录
import os
print(os.path.isdir('folder'))  # 判断路径是否为目录
2.3 获取绝对路径
import os
absolute_path = os.path.abspath('file.txt')
print(absolute_path)  # 输出文件的绝对路径

os.path.abspath() 用于获取指定路径的绝对路径。

3. 其他常用功能

3.1 执行系统命令
import os
os.system('echo Hello, World!')  # 输出 Hello, World!

os.system(command) 用于执行 shell 命令,但返回值较为简单,不适合捕获输出。

3.2 环境变量操作
import os
print(os.environ)  # 输出当前所有环境变量

# 获取环境变量的值
print(os.getenv('HOME'))

# 设置环境变量
os.environ['MY_VAR'] = 'some_value'

os.environ 用来访问和修改环境变量。

二. shutil模块

shutil 模块提供了更高级的文件和目录操作,主要用于文件的复制、删除、移动、归档等任务。它非常适合用于处理大型文件或需要进行目录树操作的任务。

1. 文件和目录操作

1.1 复制文件
import shutil
shutil.copy('source.txt', 'destination.txt')  # 复制文件到目标位置

shutil.copy(src, dst) 复制文件,将 src 文件复制到 dst 路径。

1.2 复制文件并保留元数据
import shutil
shutil.copy2('source.txt', 'destination.txt')  # 复制文件并保留元数据(如修改时间)

shutil.copy2(src, dst) 除了复制文件内容外,还会保留文件的元数据。

1.3 复制整个目录
import shutil
shutil.copytree('source_dir', 'destination_dir')  # 复制整个目录

shutil.copytree(src, dst) 复制整个目录及其内容到目标位置。

1.4 移动文件或目录
import shutil
shutil.move('source.txt', 'destination.txt')  # 移动文件或目录

shutil.move(src, dst) 用于将文件或目录从 src 移动到 dst。

1.5 删除目录及其内容
import shutil
shutil.rmtree('directory_to_delete')  # 删除目录及其所有内容shutil.rmtree(path) 

递归删除指定路径下的目录及其内容。

2. 压缩和解压缩

2.1 创建压缩文件
import shutil
shutil.make_archive('archive_name', 'zip', '/path/to/directory')  # 创建 zip 格式的压缩文件

shutil.make_archive(base_name, format, root_dir) 用于创建归档文件。format 可以是 ‘zip’、‘tar’、‘gztar’ 等。

2.2 解压缩文件
import shutil
shutil.unpack_archive('archive_name.zip', '/path/to/extract')  # 解压到指定目录

shutil.unpack_archive(filename, extract_dir) 解压指定的归档文件到目标目录。

3. 示例:读取文件内容并移动

假设你需要从一个目录读取所有 .txt 文件的内容,然后将它们移动到另一个目录并重命名:

import os
import shutil

source_directory = '/path/to/source_directory'
destination_directory = '/path/to/destination_directory'

# 确保目标目录存在
if not os.path.exists(destination_directory):
    os.makedirs(destination_directory)

# 遍历源目录中的所有文件
for filename in os.listdir(source_directory):
    if filename.endswith('.txt'):
        source_file = os.path.join(source_directory, filename)
        
        # 读取文件内容
        with open(source_file, 'r') as file:
            content = file.read()
        
        # 将文件内容保存到目标目录
        new_filename = f"moved_{filename}"
        destination_file = os.path.join(destination_directory, new_filename)
        with open(destination_file, 'w') as new_file:
            new_file.write(content)

        # 移动源文件到目标目录
        shutil.move(source_file, os.path.join(destination_directory, filename))
        print(f"文件 {filename} 已移动并重命名为 {new_filename}")

总结

  • os 模块 主要用于操作系统级别的任务,如文件和目录操作、环境变量、路径操作等。
  • shutil 模块 提供了更高级的文件和目录操作,尤其是用于复制、移动、删除、归档、解压等任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jared Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值