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

目录

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

一、文件读写

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

1、文件读写代码示例

import os

class 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 str

    def read_v2(self):
        f = open(self.file_name, "r",encoding='utf-8',errors='ignore')
        try:
            str = f.read()
            print(str)
        finally:
            f.close()
        return str

    def 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 = 0
        for line in f:
            print(line, end='')
            dict[i] = line
            i = i + 1
        f.close()
        return dict

def 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 os

class OSFile:
    # 定义基本属性
    path=''
    file_name=''
    # 定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0

    def __init__(self,path,file_name): #init方法只能有一个
        self.path = path
        self.file_name = file_name
        self.__weight = 0


    def basic_way(self):
        print(os.getcwd())  #E:\work\pythonWork\flaskLearn_1\venv\Test
        print(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\test
          C:\Users\wwy\Desktop\test\test-1
          C:\Users\wwy\Desktop\test\py测试文件1.txt
          C:\Users\wwy\Desktop\test\test.txt
          root:C:\Users\wwy\Desktop\test\test-1
          C:\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.path
        n1Path = 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) #False
        fil = os.path.isfile(self.file_name) #True
        return 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 = 0
    def __init__(self, path, file_name,file_size):  # init方法只能有一个
        OSFile.__init__(self,path,file_name)
        self.path = path
        self.file_name = file_name
        self.file_size = file_size
    #方法重写
    def remove(self):
        pass


def 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()

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

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

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

相关文章

混社会,要知道的“人性铁律”

混社会,要知道的“人性铁律”: 1.女人的私密生活,生理需求往往都是心口不一。 【闲聊】:一个人越是想要什么,往往嘴里越是说不在意,无论是男女。 2.普通人的思维,往往把宏大的社会变迁所造成…

Typescript基础面试题 | 04.精选 ts 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

论文阅读:“Model-based teeth reconstruction”

文章目录 AbstractIntroductionTeeth Prior ModelData PreparationParametric Teeth Model Teeth FittingTeeth Boundary Extraction Reference Abstract 近年来,基于图像的人脸重建方法日趋成熟。这些方法可以捕捉整个面部或面部特定区域(如头发、眼睛…

html实现各种瀑布流(附源码)

文章目录 1.设计来源1.1 动态响应瀑布流1.2 分页瀑布流1.3 响应瀑布流 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/134613121 html实现各种瀑布流(附源码),…

Java中wait()方法在synchronized方法中调用的奥秘

作为一名Java程序员,我们深知synchronized关键字和wait()方法在多线程编程中的重要性。 在本文中,我们将探讨为什么wait()方法需要在synchronized方法中调用,以及它们是如何协同工作的。 首先,让我们了解一下synchronized关键字和…

数字图像处理-Matlab实验

实验一 图像增强 实验内容: 对于给定的低对比度测试图像,利用灰度图像直方图均衡化算法进行图像视觉效果增强。 对于给定的低照度彩色测试图像,结合颜色空间转换和灰度图像直方图均衡化算法进行图像视觉效果增强。 实验数据: Test1_1.jpg: Test1_2.jpg: 实验步骤: %% …

基于PyQT5的图像分类网络训练平台

1.主界面 2.选择数据集路径 里面包含两个文件夹 train和val 3.选择类别标签 以txt为结尾 4.训练基本设置 包括输入图像大小、batch size、轮次、学习率等 5.训练高级设置 是否进行标签平滑、图像增强操作 6.选择训练日志输出地址 为一个文件夹 7.选择训练好的模…

2023.11.25 关于 MyBatis 的配置与使用

目录 引言 MyBatis 介绍 掌握两个点 在框架中的定位 创建数据库 配置 MyBatis 引入依赖 配置文件 创建实体类 构建 Mapper 层代码实现 添加 mapper 接口 添加 UserMapper.xml 实现 Service 层 实现 Controller 层 最终测验 阅读下面文章之前建议了解并创建…

新手如何对一个web网页进行一次渗透测试

新手如何对一个web网页进行一次渗透测试 文章目录 新手如何对一个web网页进行一次渗透测试什么是渗透测试?渗透测试和红蓝对抗的区别那么拿到一个网站后如何进行一次优雅的渗透测试呢 什么是渗透测试? 在获得web服务运营的公司书面授权的情况下,模拟攻击者的行为…

二进制编辑器hexedit的安装及使用

Hexedit 同时以 ASCII 和十六进制显示文件 安装 终端输入hexedit回车,如果没安装,会提示让输入 sudo apt-get install hexedit 照着输入命令,安装。安装完成后,cd到一个有二进制文件的目录下,输入hexedit命令回车 再…

Java核心知识点整理大全16-笔记

Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全2-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全3-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全4-笔记-CSDN博客 Java核心知识点整理大全5-笔记-CSDN博客 Java核心知识点整理大全6…

Typescript基础面试题 | 03.精选 ts 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

SpringCloud微服务网关Gateway:gateway基本实现、断言工厂、过滤器工厂、浏览器同源策略、跨域问题解决方案

Gateway网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0和Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API路由管理方式 为什么…

虚拟人物视频

背景 大家好,我是小欣,是这个博客的虚拟助手。在这里,我将为大家提供各种有趣、实用、甚至是意想不到的信息。作为一个年轻的语言模型,我的目标是为你们呈现出最有趣和有深度的内容。 我喜欢与大家分享知识、解答问题&#xff0…

视频格式转换:将MP4轻松转MKV格式,高效便捷

随着科技的发展,数字媒体已经深入到生活中,视频格式的转换也成为了许多人的日常要求。MP4和MKV是两种常见的视频格式,它们各有优点。MP4以其高效的压缩比和广泛的兼容性被广泛使用,而MKV则因其强大的封装能力和无损压缩而受到喜爱…

提升逼格,自己搭建博客网站不求人

背景 对于一个热爱分享知识和经验的大佬来说,搭建一个自己的个人博客是十分必要的。因为各个免费写博客平台都会有每天写博客限制,比如我现在这篇文章的限制,就是每天最多发表3篇,同时还给我的博客添加一大波广告,真是…

网络编程基本概念

网络编程基本概念 为什么需要网络编程? 用户在浏览器中,打开在线视频网站,如优酷看视频,实质是通过网络,获取到网络上的一个视频资源。 与本地打开视频文件类似,只是视频文件这个资源的来源是网络。 相…

人工智能_机器学习051_支持向量机SVM概念介绍_理解support vector machine---人工智能工作笔记0091

在出现深度学习,神经网络算法之前,支持向量机已经可以解决很多问题了,我们自然界中的问题,无非就是可以转换为回归问题和分类问题. 然后从现在开始我们来看支持向量机,首先看一下这几个字 support 是支持 vector是向量的意思,然后 machine指的是机器 那么我们之前用到的模型…

【Java】实现一个自己的定时器

上文讲了怎样使用Java自带的定时器【Java】定时器的简单应用 这篇博客就来讲如何来编写一个自己实现的定时器 1、代码框架 由定时器的使用方法得知,我们在使用定时器的时候会添加一个任务timerTask类,而timer类则是我们行使任务的类,因此可…

深入解析:如何开发抖音票务小程序

当下,开发抖音票务小程序成为了吸引年轻用户群体的一种创新方式。本文将深入解析如何开发抖音票务小程序,探讨关键步骤和技术要点。 1.确定需求和功能 考虑到抖音的用户特点,可以加入与短视频相关的票务功能,如在线购票、观影记录…