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

news2024/11/26 21:40:34

目录

  • 一、文件读写
    • 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()

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

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

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

相关文章

【如何修改输入法切换键】

操作 以win10为例,点开系统设置,选择时间和语言 选择语言,找到首选语言中的中文,点击选项 点击其中的微软输入法 选择按键 在按键中进行输入法切换按键的选择

Atcoder Beginner Contest 330——A~F题

A - Counting Passes Description Problem Statement N N N people labeled 1 , 2 , … , N 1,2,\dots,N 1,2,…,N took an exam, and person i i i scored A i A_i Ai​ points. Only those who scored at least L L L points pass this exam. Determine how many peopl…

【Linux】第二十一站:文件(一)

文章目录 一、共识原理二、C系列文件接口三、从C过渡到系统:文件系统调用四、访问文件的本质 一、共识原理 文件 内容 属性 文件分为打开的文件 和 没打开的文件 打开的文件:是谁打开的?是进程!----所以研究打开的文件本质是研…

预制构件二维码如何生成?

PC预制构件张贴二维码标识牌,可实现预制构建基本信息、设计图纸、安装说明书信息展示微信扫一扫即可查看预制件信息,大大提高施工的精度和效率;同时也可以实现预制生成过程管理、运输过程管理、安装过程管理、后期运维管理实现预制件的过程质…

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

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

Spring Security 6.1.x 系列(6)—— 显式设置和修改登录态

一、前言 此篇是对上篇 Spring Security 6.1.x 系列(5)—— Servlet 认证体系结构介绍 中4.9章节显式调用SecurityContextRepository#saveContext进行详解分析。 二、设置和修改登录态 2.1 登录态存储形式 使用Spring Security框架,认证成…

快速解决Navicat连接数据库报错:10061

目录 问题原因: 错误提示: 解决方案: 问题1:如何进入指定目录? 问题2:若出现:“服务名无效” 将MySQL注册到win服务中 问题原因: mysql服务没有开启(可能会在更新windows…

337. 打家劫舍III (二叉树)

题目 题解 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def rob(self, root: Optional[TreeNode]) ->…

游戏软件提示xinput1_3.dll缺失如何修复呢?6种常用修复方法总结

在计算机使用过程中,我们常常会遇到一些错误提示,其中之一就是“xinput1_3.dll丢失”。这个问题可能会导致游戏无法正常运行。为了解决这个问题,我们需要了解xinput1_3.dll是什么以及如何找回丢失的文件。本文将详细介绍xinput1_3.dll丢失的解…

鸿蒙HarmonyOS手把手带大家创建第一个项目 并做一个基本的组件结构讲解

上文 鸿蒙HarmonyOS 编辑器 下载 安装带大家了解并下载安装了 HarmonyOS 的编辑器 那么 我们现在双击打开它 在左侧菜单中选择 Create Project 这里有多种模板 我们先选择默认的 点击下一步 这里 我们项目的目录 和 名字可以修改一下 其他的都先用默认的就好了 但是还是要注…

人力资源管理后台 === 组织架构

目录 1.组织架构-树组件应用 2.组织架构-树组件自定义结构 3.组织架构-获取组织架构数据 4.组织架构-递归转化树形结构 5.组织架构-添加子部门-新建弹层组件 6.组织架构-添加子部门-表单结构 7.组织架构-添加子部门-表单基本校验 8.组织架构-添加子部门-表单业务校验 9…

2023.11.25 关于 MyBatis 的配置与使用

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

python回溯求解电话号码组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 输入:digits "23" 输出:["ad&qu…

linux shell操作 - 05 进程 与 IO 模型

文章目录 计算机内存分配进程与子进程流IO模型阻塞IO非阻塞IOIO多路复用异步IO网络IO模型简单的socket并发的socket 计算机内存分配 一个32位,4G内存的计算机,内存使用分为两部分: 操作系统内核空间;应用程序的用户空间使用的操…

3.OpenResty系列之Nginx反向代理

1. Nginx简介 Nginx (engine x) 是一款轻量级的 Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器 什么是反向代理? 反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求&#x…

力扣373场周赛题解

第一题: 这个题是一个简单题,数据范围也特别小,所以直接使用模拟方式暴力解答。 直接进行行移动的过程,然后检查移动后的结果是否与移动前相同。 代码: ​ public class Solution {// 将指定行循环右移k次pri…

怎样设置field symbol的断点

今天看到一篇Jerry Wang 2016年写的关于设置 conditional break point的文章,正好解决我多年如何设置根据fs值进行调试,因为watch point是不能对fs进行处理。非常感谢,也非常开心! Source code breakpoint in ABAP debugger Crea…

以太网通讯协议小结--持续更新中

一、以太网介绍 以太网是一种产生较早,使用相当广泛的局域网技术,局域网就是一个区域的网络互联,可以使办公室也可以是学校等等,大小规模不一。 目前以太网根据速度等级分类大概分为:标准以太网(10Mbit/s…

针对无法创建JDK8版本的SpringBoot项目

自从昨日起,JDK突然改版了,不能在使用JDK8来进行创建Spring Boot项目了,导致目前小编的JDK无从下手~~ 因此,在仔细琢磨了一晚之后,想起来了以下几个方法,与大家共勉。希望能够得到大家的认可! …

班级管理五步法

亲爱的教师朋友们!今天我要和大家分享一个超级实用的班级管理方法——班级管理五步法!用这个方法,轻松掌握班级秩序,一起来看看吧! 第一步:建立规矩 我们要和孩子们一起建立规矩。规矩要简单明了&#xff…