【100天精通python】Day21:文件及目录操作_文件的权限处理和批量处理

目录

专栏导读 

1. 文件的权限处理

1.1 查询文件权限

1.2 修改文件权限

2 文件的批量处理

2.1 使用os模块和os.listdir()函数

 2.2 使用glob模块

2.3 使用shutil模块

2.3.1 批量复制文件

 2.3.2 批量移动文件

2.3.3 批量删除文件

2.3.4 批量创建目录


专栏导读 

专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12375510.html


1. 文件的权限处理

在Python中,可以使用内置的os模块来进行文件的权限操作。os模块提供了一系列函数,用于查询和修改文件的权限和其他属性。以下是一些常见的文件权限操作:

1.1 查询文件权限

         可以使用os.access()函数来检查文件的访问权限。这个函数可以检查文件是否具有指定的访问权限(读、写或执行)。

import os

file_path = 'example.txt'

# 检查文件是否可读
if os.access(file_path, os.R_OK):
    print("文件可读")
else:
    print("文件不可读")

# 检查文件是否可写
if os.access(file_path, os.W_OK):
    print("文件可写")
else:
    print("文件不可写")

# 检查文件是否可执行
if os.access(file_path, os.X_OK):
    print("文件可执行")
else:
    print("文件不可执行")

1.2 修改文件权限

        可以使用os.chmod()函数来修改文件的权限。该函数可以为文件设置新的权限模式。

        在Python中,文件的权限是指决定谁可以对文件进行读取、写入和执行操作的规则。文件权限通常用三个八进制数字表示,每个数字对应一个用户类别:文件所有者、所属组和其他用户。每个数字又由三位二进制数组成,表示对应用户类别的读(r)、写(w)和执行(x)权限。

        以下是文件权限表示的示例:

  • 0o400:文件所有者有读权限,其他用户没有任何权限。
  • 0o600:文件所有者有读写权限,其他用户没有任何权限。
  • 0o644:文件所有者有读写权限,所属组和其他用户只有读权限。
  • 0o755:文件所有者有读写执行权限,所属组和其他用户有读执行权限。

        在Python中,可以使用os模块来查询和修改文件的权限。前面已经介绍了如何使用os.access()函数查询文件的权限,以及使用os.chmod()函数修改文件的权限。

        需要注意的是,修改文件权限可能需要管理员权限或文件的拥有者权限。在操作文件权限时,要小心确保不会导致不必要的安全风险。

import os

file_path = 'example.txt'

# 设置文件为只读权限
os.chmod(file_path, 0o444)

# 设置文件为可写权限
os.chmod(file_path, 0o666)

# 设置文件为可执行权限
os.chmod(file_path, 0o755)

2 文件的批量处理

        在Python中,文件的批量处理是指对多个文件进行相同或类似操作的过程。这在实际应用中非常常见,例如批量重命名文件、批量复制、批量删除等。Python提供了多种方法来实现文件的批量处理,下面将详细介绍其中的几种方法,并提供示例代码。

2.1 使用os模块和os.listdir()函数

        这是一种简单的方法,通过os.listdir()函数列出目录中的所有文件,然后使用循环对每个文件执行相应操作。

        示例1:批量重命名文件,将文件名中的".txt"后缀改为".csv" 

import os

folder_path = 'path/to/folder'

# 获取目录下所有文件列表
for filename in os.listdir(folder_path):
    # 判断文件名是否以".txt"结尾
    if filename.endswith('.txt'):
        # 将".txt"后缀改为".csv"
        new_filename = filename.replace('.txt', '.csv')
        # 重命名文件
        os.rename(os.path.join(folder_path, filename), os.path.join(folder_path, new_filename))

示例2 :批量重命名目标文件夹中的所有文件,将所有文件名中的"old_string"替换为"new_string"

import os

# 设置目标文件夹路径
folder_path = 'path/to/folder'

# 获取目标文件夹中的所有文件名
file_list = os.listdir(folder_path)

# 遍历文件列表,对每个文件名进行修改
for filename in file_list:
    # 在这里可以根据自己的需求定义重命名的规则
    # 示例:将所有文件名中的"old_string"替换为"new_string"
    new_filename = filename.replace("old_string", "new_string")

    # 构建原文件的完整路径和新文件的完整路径
    old_file_path = os.path.join(folder_path, filename)
    new_file_path = os.path.join(folder_path, new_filename)

    # 执行文件重命名操作
    os.rename(old_file_path, new_file_path)

print("文件批量重命名完成!")

 2.2 使用glob模块

  glob模块是Python标准库中提供的用于查找文件路径名匹配的工具。它支持使用通配符模式来匹配文件和目录的名称,让我们能够更方便地进行文件路径的筛选和查找。glob模块通常与os模块一起使用,能够快速方便地获取匹配的文件路径。

        主要的glob模块函数是glob.glob(),它接受一个模式字符串作为参数,并返回所有与模式匹配的文件路径名的列表。模式字符串可以包含特殊字符(通配符)来匹配文件名中的部分内容。

        示例1:批量删除指定文件夹下所有名字包含"temp_"前缀的文件

import glob
import os

folder_path = 'path/to/folder'

# 使用通配符匹配文件名,删除所有名字包含"temp_"前缀的文件
for file_path in glob.glob(os.path.join(folder_path, 'temp_*')):
    os.remove(file_path)

        示例2:查找当前目录下所有以.txt结尾的文件

import glob

txt_files = glob.glob('*.txt')
print(txt_files)

        示例3:查找指定目录下所有以.jpg结尾的图片文件

import glob

folder_path = 'path/to/folder'
jpg_files = glob.glob(folder_path + '/*.jpg')
print(jpg_files)

            示例4:使用通配符来查找文件

import glob

# 查找所有以字母'a'开头、中间包含一个或多个任意字符、以字母'b'结尾的文件
files = glob.glob('a*b')
print(files)

          示例5: 查找多级目录下的文件

import glob

# 查找所有子目录下以'.txt'结尾的文件
all_txt_files = glob.glob('path/to/folder/**/*.txt', recursive=True)
print(all_txt_files)

2.3 使用shutil模块

  shutil模块提供了更高级的文件和目录操作功能,可以方便地进行文件的复制、移动等批量处理操作。

2.3.1 批量复制文件

         使用shutil.copy()函数可以实现文件的批量复制。

         示例1:批量复制所有的".txt"文件到另一个目录。

import os
import shutil

source_folder = 'path/to/source_folder'
destination_folder = 'path/to/destination_folder'

# 获取源文件夹下所有文件列表
for filename in os.listdir(source_folder):
    # 判断文件名是否以".txt"结尾
    if filename.endswith('.txt'):
        # 构建源文件和目标文件的路径
        source_file = os.path.join(source_folder, filename)
        destination_file = os.path.join(destination_folder, filename)
        # 复制文件
        shutil.copy(source_file, destination_file)
 2.3.2 批量移动文件

        使用shutil.move()函数可以实现文件的批量移动。

        示例:将指定目录下所有.txt文件移动到另一个目录

import os
import shutil

source_folder = 'path/to/source_folder'
destination_folder = 'path/to/destination_folder'

# 获取源文件夹下所有文件列表
for filename in os.listdir(source_folder):
    # 判断文件名是否以'.txt'结尾
    if filename.endswith('.txt'):
        # 构建源文件和目标文件的路径
        source_file = os.path.join(source_folder, filename)
        destination_file = os.path.join(destination_folder, filename)
        # 移动文件
        shutil.move(source_file, destination_file)
2.3.3 批量删除文件

        使用os.remove()函数可以实现文件的批量删除。

        示例:删除指定目录下所有以.bak结尾的备份文件。

import os

folder_path = 'path/to/folder'

# 获取目录下所有文件列表
for filename in os.listdir(folder_path):
    # 判断文件名是否以'.bak'结尾
    if filename.endswith('.bak'):
        # 构建文件的完整路径
        file_path = os.path.join(folder_path, filename)
        # 删除文件
        os.remove(file_path)
2.3.4 批量创建目录

         使用os.makedirs()函数可以实现批量创建目录。

        示例:在指定目录下创建多级子目录。

import os

base_folder = 'path/to/base_folder'

# 创建多级子目录
subfolders = ['subfolder1', 'subfolder2', 'subfolder3']

for folder in subfolders:
    folder_path = os.path.join(base_folder, folder)
    os.makedirs(folder_path)

以上是三种常见的方法来实现文件的批量处理。根据具体的需求,您可以选择合适的方法来处理文件。请注意,在进行批量文件处理时,一定要小心谨慎,确保不会误操作或删除重要的文件。建议在进行批量处理操作前先备份文件,以免造成不可逆的损失。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/54015.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

聊聊拉长LLaMA的一些经验

Sequence Length是指LLM能够处理的文本的最大长度,越长,自然越有优势: 更强的记忆性。更多轮的历史对话被拼接到对话中,减少出现遗忘现象 长文本场景下体验更佳。比如文档问答、小说续写等 当今开源LLM中的当红炸子鸡——LLaMA…

[Docker实现测试部署CI/CD----相关服务器的安装配置(1)]

目录 0、CI/CD系统最终架构图规划IP地址 1、git配置Git下载pycharm配置gitidea配置git 2、GitLab安装与配置主机要求拉取镜像定义 compose.yml启动gitlab浏览器访问并修改密码查看登录密码修改密码 3、SonarQube 安装与配置拉取镜像修改虚拟内存的大小启动SonarQube登录 SonarQ…

2023 蓝桥杯真题B组 C/C++

https://www.dotcpp.com/oj/train/1089/ 题目 3150: 蓝桥杯2023年第十四届省赛真题-冶炼金属 题目描述 小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V,V 是一个正整数,这意味着消耗 V 个普通金 属 O…

价值 1k 嵌入式面试题-计算机网络 OSI

开门见山 请讲下 OSI 各层协议的主要功能? 常见问题 回答不系统回答不确切无法和实际网络协议做关联对应 答题思路 OSI 代表了开放互联系统中信息从一台计算机的一个软件应用流到另一个计算机的另一个软件应用的参考模型 OSI 包含 7 层,每一层负责特…

51单片机学习--串口通信

首先需要配置寄存器: 下面这里SCON配0x40和0x50都可以,因为暂时还不需要接受信息,所以REN置1置0都可 void Uart_Init(void) //4800bps11.0592MHz {PCON | 0x80; //使能波特率倍速位SMODSCON 0x50; //8位数据,可变波特率TMOD & 0x0F…

tinkerCAD案例:29. 摇头娃娃

Research Your Favorite Bobblehead 摇头娃娃 Project Overview: 项目概况: Design and create your favorite Minecraft 3D bobble head. All you need is a computer, 3D printer, spring and your creativity to your favorite Minecraft character in the for…

1、Hadoop3.x 从入门到放弃,第一章:概念

Hadoop3.x从入门到放弃,第一章:概念 一、什么是大数据 1、主要解决什么 大数据主要解决:海量数据的“采集”、“存储” 和 "分析计算" 问题2、大数据特点 1> Volume 大量 2> velocity 高速 3> variety 多样性数据分为…

网络层:IP协议/Mac协议

IP协议 主机: 配有IP地址, 但是不进行路由控制的设备; 路由器: 即配有IP地址, 又能进行路由控制; 节点: 主机和路由器的统 称; IP 目标网络(前半部分) 目标主机(后半部分) IP层的核心:IP地址定位主机(定…

Socks IP轮换:为什么是数据挖掘和Web爬取的最佳选择?

在数据挖掘和Web爬取的过程中,IP轮换是一个非常重要的概念。数据挖掘和Web爬取需要从多个网站或来源获取数据,而这些网站通常会对来自同一IP地址的请求进行限制或封锁。为了避免这些问题,数据挖掘和Web爬取过程中需要使用Socks IP轮换技术。在…

《向量数据库指南》——如何持久化存储 LlamaIndex 向量索引?

随着 AGI 时代的到来,越来越多的开发者开始思考如何有效利用大模型,不过,大家在构建 LLM 应用时普遍会面临三大挑战: LLM 的使用成本高昂LLM 无法及时提供最新信息LLM 缺乏特定专业领域的知识 针对上述问题,业界主流的做法是采用两种主要框架:微调和缓存 + 注入。 …

集团MySQL的酒店管理系统

酒店管理系统 概述 基于Spring Spring MVC MyBatis的酒店管理系统,主要实现酒店客房的预定、入住以及结账等功能。使用Maven进行包管理。 用户端主要功能包括: 登录注册、客房预订、客房评论(编写评论和查看评论) 后台管理主要…

如何在 Ubuntu 22.04 下编译 StoneDB for MySQL 8.0 | StoneDB 使用教程 #1

作者:双飞(花名:小鱼) 杭州电子科技大学在读硕士 StoneDB 内核研发实习生 ❝ 大家好,我是 StoneDB 的实习生小鱼,目前正在做 StoneDB 8.0 内核升级相关的一些事情。刚开始接触数据库开发没多久&#xff0c…

Linux 学习记录59(ARM篇)

Linux 学习记录59(ARM篇) 本文目录 Linux 学习记录59(ARM篇)一、IIC总线1. 概念2. IIC总线硬件连接 二、系统框图三、IIC时序1. 起始信号 / 停止信号2. 数据传输信号3. 应答信号 / 非应答信号4. 寻址信号 四、IIC协议1. 主机给从机发送一个字节(写)2. 主机给从机发送多个连续字…

MySQL 的 Join 查询及 Hash Join 优化 | StoneDB 技术分享会 #3

StoneDB开源地址 https://github.com/stoneatom/stonedb 设计:小艾 审核:丁奇、宇亭 编辑:宇亭 作者一:徐鑫强(花名:无花果) 电子科技大学-计算机技术-在读硕士、StoneDB 内核研发实习生 作…

Android 卡顿分析与布局优化

一、什么是卡顿?或者说我们怎么感知APP卡顿? 这里面涉及到android UI渲染机制,我们先了解一下android UI是怎么渲染的,android的View到底是如何一步一步显示到屏幕上的? android系统渲染页面流程: 1&…

重新审视MHA与Transformer

本文将基于PyTorch源码重新审视MultiheadAttention与Transformer。事实上,早在一年前博主就已经分别介绍了两者:各种注意力机制的PyTorch实现、从零开始手写一个Transformer,但当时的实现大部分是基于d2l教程的,这次将基于PyTorch…

使用javax.validation.constraints进行数据验证

使用javax.validation.constraints进行数据验证 在Java应用中,数据的验证是一个很重要的部分,特别是在接收用户输入或处理外部数据时。为了简化和标准化数据验证的过程,Java提供了javax.validation.constraints包,其中包含一系列注…

乳腺癌CT影像数据的深度学习:R语言与ANN神经网络构建高性能分类诊断模型

一、引言 乳腺癌是全球最常见的女性恶性肿瘤之一,也影响着男性的健康。据统计,每年有数百万人被诊断出患有乳腺癌[1]。乳腺癌的早期检测和准确诊断对于治疗和预后至关重要。然而,乳腺癌的早期诊断面临许多挑战,如图像解读的主观性…

uniapp 微信小程序:v-model双向绑定问题(自定义 props 名无效)

uniapp 微信小程序:v-model双向绑定问题(自定义 props 名无效) 前言问题双向绑定示例使用 v-model使用 v-bind v-on使用 sync 修饰符 参考资料 前言 VUE中父子组件传递数据的基本套路: 父传子 props子传父 this.$emit(事件名, …

Linux安装VScode

从本篇开始,打算有时间就写写在VScode中编写一些ros相关的案例程序用于学习记录。本篇是如何在Linux安装VScode的第一篇。 一、下载VScode 在Linux中打开浏览器输入:https://code.visualstudio.com/Download,选择与你电脑相匹配的版本下载&…