【python】--文件/文件夹读写及操作

目录

  • 一、文件读写
    • 1、文件读写代码示例
  • 二、文件/文件夹操作
    • 1、代码示例

一、文件读写

读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
在这里插入图片描述

1、文件读写代码示例

import osclass OperatorFile:def __init__(self,file_name):self.file_name = file_name"""将字符串或bytes类型的数据写入文件。可以多次重复进行,其实都是在内存中的操作,并不会立刻写回硬盘,直到执行close()方法后,才会将所有的写入操作反映到硬盘上。"""def write(self, content):f = open(self.file_name, "wa+")f.write(content)f.close()return "OK"def write1(self, content):f = os.open(self.file_name, os.O_RDWR|os.O_CREAT) #没有就创建一个文件re = os.write(f,content)  #re是返回写入的字符个数os.close(f)return re"""读取一定大小的数据, 然后作为字符串或字节对象返回。文件比较小,可用该方法"""def read(self):f = open(self.file_name, "r",encoding='utf-8',errors='ignore')str = f.read()print(str)f.close()return strdef read_v2(self):f = open(self.file_name, "r",encoding='utf-8',errors='ignore')try:str = f.read()print(str)finally:f.close()return strdef read_v3(self):with open(self.file_name, "r",encoding='utf-8',errors='ignore') as f:str = f.read()print(str)return str"""从文件中读取一行n内容。读一行,处理一行,并且不能回头,只能前进"""def readline(self):f = open(self.file_name, "r",encoding='utf-8',errors='ignore')str = f.readline()print(str)f.close()return str"""将文件中所有的行,一行一行全部读入一个列表内,按顺序一个一个作为列表的元素,并返回这个列表。每行都保存在列表里,可以随意存取。如果是配置文件,调用readlines()最方便。"""def readlines(self):f = open(self.file_name, "r",encoding='utf-8',errors='ignore')list = f.readlines()print(list)f.close()return list"""文件对象作为一个迭代器来使用。 不需要将文件一次性读出一般情况文件,该方法即可"""def ergodic_file(self):f = open(self.file_name, "r",encoding='utf-8',errors='ignore')dict={}i = 0for line in f:print(line, end='')dict[i] = linei = i + 1f.close()return dictdef main():file_name = "C:\\Users\\wwy\\Desktop\\新建文件夹\\py测试文件1.txt"operator_file = OperatorFile(file_name=file_name)str1 = operator_file.read()str2 = operator_file.read_v2()str3 = operator_file.read_v3()str4 = operator_file.readline()str5 = operator_file.readlines()str6 = operator_file.ergodic_file()print(str6)if __name__ == '__main__':main()

测试结果
在这里插入图片描述

二、文件/文件夹操作

在这里插入图片描述
常见的操作整理如下:
文件夹操作:包括文件夹的创建、修改(改名/移动),查询(查看、遍历)、删除等。
文件操作:包括文件的创建、修改、读取、删除等。
路径操作:文件夹或文件的路径操作,如绝对路径,文件名与路径分割,扩展名分割等

1、代码示例

import osclass OSFile:# 定义基本属性path=''file_name=''# 定义私有属性,私有属性在类外部无法直接进行访问__weight = 0def __init__(self,path,file_name): #init方法只能有一个self.path = pathself.file_name = file_nameself.__weight = 0def basic_way(self):print(os.getcwd())  #E:\work\pythonWork\flaskLearn_1\venv\Testprint(os.listdir(self.path)) #['py测试文件1.txt', 'test-1', 'test.txt']"""os.stat_result(st_mode=16895, st_ino=472877960873943404, st_dev=3763895111, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1700616892, st_mtime=1700616740, st_ctime=1700550223)"""print(os.stat(self.path))"""os.stat_result(st_mode=33206, st_ino=2041538006082415215, st_dev=3763895111, st_nlink=1, st_uid=0, st_gid=0, st_size=156, st_atime=1700616740, st_mtime=1700544434, st_ctime=1700616740)"""print(os.stat(self.file_name))data = os.walk(self.path)  # 遍历path目录"""root:C:\Users\wwy\Desktop\testC:\Users\wwy\Desktop\test\test-1C:\Users\wwy\Desktop\test\py测试文件1.txtC:\Users\wwy\Desktop\test\test.txtroot:C:\Users\wwy\Desktop\test\test-1C:\Users\wwy\Desktop\test\test-1\test-1.txt"""for root, dirs, files in data:  # 递归遍历及输出print("root:%s" % root)for dir in dirs:print(os.path.join(root, dir))for file in files:print(os.path.join(root, file))oldPath = self.pathn1Path = oldPath+"\\test_n1"#os.mkdir(n1Path)  #新建单个目录,若目录路径中父目录不存在,则创建失败,没目录,抛异常os.makedirs(n1Path) #新建多个目录,若目录路径中父目录不存在,则自动创建os.listdir(self.path)os.rename(n1Path, oldPath+"\\test_n2") #重命名目录或文件,可修改文件或目录的路径(即移动操作),若目标文件目录不存在,则报错。# os.renames(oldPath+"\\test_t1",oldPath+"\\test_t2") #不存在的文件夹重新命名,异常def query(self):f = os.open(self.file_name, os.O_RDWR | os.O_CREAT)  # 打开文件,若文件不存在,则创建str_bytes = os.read(f, 100)  # 读100字节str = bytes.decode(str_bytes,encoding='utf-8',errors='ignore')  # 字节转字符串print(str)os.close(f)def remove(self):os.remove(self.file_name) #不能删除文件目录def pathOs(self):dir = os.path.isdir(self.file_name) #Falsefil = os.path.isfile(self.file_name) #Truereturn os.path.abspath(self.file_name)"""批量修改文件名"""def batch_rename(self):itemlist = os.listdir(self.path)# 获取目录文件列表for item in itemlist:# 连接成完整路径item_path = os.path.join(self.path, item)print(item_path)# 修改文件名if os.path.isfile(item_path):splitext = os.path.splitext(item_path)os.rename(item_path, splitext[0] + "-ww" + splitext[1])"""遍历目录及子目录下所有指定扩展名的文件"""def walk_ext_file(self, ext_list):# @dir_path参数:遍历的目录# @ext_list参数:拓展名列表,例['.mp4', '.mkv', '.flv']# 遍历for root, dirs, files in os.walk(self.path):# 获取文件名称及路径for file in files:file_path = os.path.join(root, file)file_item = os.path.splitext(file_path)# 输出指定扩展名的文件路径if file_item[1] in ext_list:print(file_path)"""按修改时间排序指定目录下的文件"""def sort_file_accord_to_time(self):# 排序前itemlist = os.listdir(self.path)print(itemlist)  #['py测试文件1-ww.txt', 'test-1', 'test-ww.txt', 'test_n2']# 正向排序itemlist.sort(key=lambda filename: os.path.getmtime(os.path.join(self.path, filename)))print(itemlist)  #['py测试文件1-ww.txt', 'test-ww.txt', 'test-1', 'test_n2']# 反向排序itemlist.sort(key=lambda filename: os.path.getmtime(os.path.join(self.path, filename)), reverse=True)print(itemlist)   #['test_n2', 'test-1', 'py测试文件1-ww.txt', 'test-ww.txt']# 获取最新修改的文件print(itemlist[0])  #test_n2#继承
class OSFileV2(OSFile):file_size = 0def __init__(self, path, file_name,file_size):  # init方法只能有一个OSFile.__init__(self,path,file_name)self.path = pathself.file_name = file_nameself.file_size = file_size#方法重写def remove(self):passdef main():path ="C:\\Users\\wwy\\Desktop\\test"file_name = "C:\\Users\\wwy\\Desktop\\test\\py测试文件1.txt"os_file = OSFile(path=path,file_name=file_name)#  os_file.basic_way()#   os_file.query()#   os_file.pathOs()#   os_file.batch_rename()ext_list = ['.mp4', '.mkv', '.flv']os_file.walk_ext_file(ext_list)os_file.sort_file_accord_to_time()if __name__ == '__main__':main()

测试结果
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人规划算法——movebase导航框架源码分析

这里对MoveBase类的类成员进行了声明,以下为比较重要的几个类成员函数。 构造函数 MoveBase::MoveBase | 初始化Action 控制主体 MoveBase::executeCb收到目标,触发全局规划线程,循环执行局部规划 全局规划线程 void MoveBase::planThread |…

学习笔记:如何分析财务报表

其实财务报表分析最核心的东西,是通过财务报表这个结果,由果推因,找出造成这个结果的原因。 会计是商业的语言 首先第一个问题是——会计是商业的语言,这是会计的根本。 什么叫“语言”,就是可以通过它进行交流。比如…

用队列和栈分别实现栈和队列

用队列实现栈 题目解读 本题的要求是要用两个队列来实现一个先进后出的栈,并且要有以下功能: 1.将元素压入栈中 2.移除栈顶元素并且返回他 3.返回栈顶元素 4.判断栈是否为空 题目构思和代码实现 我们首先要做的就是将实现队列的代码导入该题&#xff…

SSM 框架整合

1 整合配置 1.1 流程 1.2 Spring 整合 MyBatis 1.3 Spring 整合 SpringMVC 1.4 配置代码 JdbcConfig.java public class JdbcConfig {Value("${jdbc.driver}")private String driver;Value("${jdbc.url}")private String url;Value("${jdbc.usern…

四、IDEA创建项目时,Maven Archetype模板工程说明

什么是Maven Archetype Archetype是一个Maven项目的模板工具包,它定义了一类项目的基本架构。Archetype为开发人员提供了创建Maven项目的模板,同时它也可以根据已有的Maven项目生成参数化的模板。 官方文档:https://maven.apache.org/archet…

cuda magma 构建 使用cmake构建的步骤记录

这不是群论代数软件,而是cuda 矩阵计算软件 1. 生成其他精度的源代码 1.1 复制编辑 make.inc cp make.inc-examples/make.inc.openblas ./make.inc 并修改其中的定义: OPENBLASDIR ? /opt/OpenBLAS 这需要实现安装openblas到此处。文件夹解构&…

【通讯协议】REST API vs GraphQL

在API设计方面,REST和GraphQL各有缺点。下图显示了 REST 和 GraphQL 之间的快速比较。 REST 使用标准 HTTP 方法(如 GET、POST、PUT、DELETE)进行 CRUD 操作。当您需要在单独的服务/应用程序之间提供简单、统一的接口时,效果很好…

超详细csapp-linklab之第一阶段“输出学号”实验报告

该实验的主题是“链接”。 准备工具 虚拟机,Ubuntu32位,hexedit,main.o,phase1.o,该实验的C代码框架如下 // main.c void (*phase)(); /*初始化为0*/int main( int argc, const char* argv[] ) {if ( phase )(*ph…

链表经典面试题

1 回文链表 1.1 判断方法 第一种(笔试): 链表从中间分开,把后半部分的节点放到栈中从链表的头结点开始,依次和弹出的节点比较 第二种(面试): 反转链表的后半部分,中间节…

leetcode刷题详解五

117. 填充每个节点的下一个右侧节点指针 II 关键点:先递归右子树 画一下就知道了,画一个四层的二叉树,然后右子树多画几个节点就知道为啥了 Node* connect(Node* root) {if(!root || (!root->left && !root->right)){return ro…

实战oj题——括号匹配问题

前言:前面我们已经做了一些关于顺序表和链表的oj题,今天我们就来解决一些有关于栈和队列的oj题。 我们对这个题看起来毫无头绪,但是我们刚学习了栈,就可以用栈来解决这一类问题,如果我们读取到左括号就入栈&#xff0c…

2023年最新Visual Studio下载安装以及C语言环境搭建教程(含C语言入门教程)

文章目录 写在前面C语言简介Visual Studio简介Visual Studio安装教程 C语言入门Visual Studio使用教程 写在后面 写在前面 2023年最新Visual Studio下载安装以及C语言环境搭建教程来啦!一起来看看吧~ C语言简介 C语言是一种高级编程语言,由美国贝尔实…

90. 打家劫舍II (房子围成一圈)

题目 题解 class Solution:def rob(self, nums: List[int]) -> int:def dp(nums: List[int]) -> int:N len(nums)# 定义状态:dp[i]表示从第i个房屋开始偷窃,能够偷到的最高金额dp [0 for i in range(N)]for i in range(N-1, -1, -1):if i N-1:…

uiautomator2 无法连接 ATX-Agent

最近需要写个安卓自动项目,本身不想用appium 。主要是appium需要安装的依赖太多,一单换个环境又要配置新的环境。但是ATX-Agent装好之后怎么都连接不是。 报错信息如下: .........省略............ uiautomator2.exceptions.GatewayError: (…

渗透测试【一】:渗透测试常见问题

渗透测试【一】:渗透测试常见问题 1、问题清单2、问题现象及解决办法2.1、点击劫持2.2、用户枚举2.3、Springboot未授权访问2.4、Swagger未授权访问2.5、Host头注入2.6、任意文件上传2.7、敏感路径泄露2.8、跨域资源共享2.9、Spring Cloud Gateway RCE2.10、Content…

【挑战业余一周拿证】CSDN官方课程目录

一、亚马逊云科技简介 二、在云中计算 三、全球基础设施和可靠性 四、联网 五、存储和数据库 六、安全性 七、监控和分析 八、定价和支持 九、迁移和创新 十、云之旅 关注订阅号 CSDN 官方中文视频(免费):点击进入 一、亚马逊云科…

女生儿童房装修:原木上下铺搭配粉色调。福州中宅装饰,福州装修

你是否正在为女生儿童房的装修而发愁呢?该如何让房间既适合孩子生活,又能够满足日常学习的需要呢?这里有一个精美的装修案例,或许能够为你提供一些灵感。 1️⃣ 原木上下铺 房间的上下铺采用了原木色调,带来了自然、温…

STM32 F1 串口空闲中断 + DMA实现数据发送

DMA实现数据发送 文章目录 DMA实现数据发送前言一、DMA二、代码编写1.DMA2.USART3.main 前言 当你遇到通信数据量大的时候,可以使用 空闲中断 DMA 的方案来减轻 CPU 的压力。 或者 在进行stm32开发时,有时会遇到这种情况:需要在设备间进行数…

1.1 C语言之入门:使用Visual Studio Community 2022运行hello world

1.1 使用Visual Studio Community 2022运行c语言的hello world 一、下载安装Visual Studio Community 2022 与 新建项目二、编写c helloworld三、编译、链接、运行 c helloworld1. 问题记录:无法打开源文件"stdio.h"2. 问题记录:调试和执行按钮…

【Linux】bash 终端指令

进程 $ ps aux | grep pwd work 63317 0.0 0.0 51192 612 pts/9 S 14:22 0:00 grep /home/work/search/1000000.dyenv-user-diaoyan-baiseCliPlus-baisePlus-195522.diaoyan.yq/ala-ac/output_root端口 查看本机端口开放情况 netstat -tln | grep :31 tcp …