当前位置: 首页 > article >正文

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 模块 提供了更高级的文件和目录操作,尤其是用于复制、移动、删除、归档、解压等任务。

http://www.kler.cn/a/452453.html

相关文章:

  • C# 第二阶段 modbus
  • 浏览器点击视频裁剪当前帧,然后粘贴到页面
  • Python实现机器学习驱动的智能医疗预测模型系统的示例代码框架
  • 使用sql实现将一张表的某些字段数据存到另一种表里
  • 单片机:实现SYN6288语音播报(附带源码)
  • sql之全文索引
  • Android Jetpack LiveData源码解析
  • Leetcode3218. 切蛋糕的最小总开销 I
  • WordPress Tutor LMS插件 SQL注入漏洞复现(CVE-2024-10400)
  • workman服务端开发模式-应用开发-后端api登录之浏览器版本工具开发
  • 【计算机视觉CV-图像分类】06 - VGGNet的鲜花分类实现:从数据预处理到模型优化的完整实战!
  • 【监控】夜莺监控系统各环节资源压力分析
  • 基于python的电子报实现思路
  • HarmonyOS NEXT 实战之元服务:静态案例效果--- 歌手推荐
  • 【开源免费】基于SpringBoot+Vue.JS靓车汽车销售网站(JAVA毕业设计)
  • GitLab 停止中国区用户访问,为用户提供60天的迁移期
  • 音视频入门知识(四):封装篇
  • flutter教程01 flutter项目的目录结构
  • 单片机:实现设计简单计算器(4位加减乘除)(附带源码)
  • 【AIGC】2024-CVPR-分析和改进扩散模型的训练动态