python文件与目录操作

news2024/11/15 12:17:37

目录

文件编码

文件的读取

打开文件

mode常用的三种基础访问模式

读取文件

关闭文件

with open语法

文件的写入操作

文件综合案例

a.txt内容

代码实现

b.txt文件

目录操作

前言

os模块

具体方法 

os.path模块

具体方法 

文件编码

前言:由于计算机只能识别0和1,所以我们丰富的文本文件通过使用编码技术(密码本)将内容翻译成0或1存入

编码技术:即翻译的规则,记录了如何将内容翻译成二进制,以及如何将二进制翻译成可识别的内容

注意:计算机中有许多可用的编码(UTF-8、GBK、Big5)等,不同的编码,将内容翻译的二进制也是不同的,所以要使用正确的编码,才能对文件进行正确的读写操作

文件的读取

前言:内存中存放的数据在计算机关机后就会消失,要想长久的保存数据,就要使用硬盘、光盘、U盘等设备。为了便于数据的管理和检索因此引入了文件的概念

注意:

  • 一篇文章、一段视频、一个可执行程序,都可以被保存为一个文件,并赋予一个文件名
  • 操作系统以文件为单位管理磁盘中的数据。
  • 文件可分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别
  • 在生活中,文件的操作主要包括打开、关闭、读、写等操作

打开文件

语法:文件对象=open(name,mode,encoding=编码格式)

参数解释 

  • name:要打开得目标文件名的字符串(可以包含文件所在的具体路径)
  • mode:设置打开文件的模式(访问模式):只读、写入、追加等
  • 编码格式:文件编码的格式(推荐使用UTF-8)

注意:

  • 里面传入的三个参数均为字符串格式 
  • 因为encoding并不是第三个参数,所以不能用顺序传参

mode常用的三种基础访问模式

读取文件

语法:变量=文件对象.read(num)

解释:num表示要从文件中读取的数据长度(单位是字节),若没有传入num,那么就表示读取文件所有的数据

语法:变量=文件对象.readlines()

解释:readlines可以按照行的方式把整个文件的内容进行一次性读取,并且返回的是一个列表,其中的每一行数据为一个元素

语法:变量=文件对象.readline()

解释:一次读取一行内容

for循环读取文件行

for line in 文件对象:
    print(line)

理解:每一个line临时变量,就记录了文件的一行数据 

注意:我们在读取文件时,只要该文件对象打开之后,后面不管调用什么文件读取方法,他都会续接上一次读取文件的方法。

关闭文件

语法:文件对象.close()

注意:若不调用close,同时程序没有停止运行,那么这个文件将一直被python程序占用

with open语法

with open(name,mode,encoding) as 文件对象变量:
    f.readlines()

注意:通过with open的语句块对文件进行操作,可以在操作完成后自动关闭close文件,避免遗忘掉close方法

文件的写入操作

写入文件到内存:文件对象.write(写入的内容)

文件刷新:文件对象.flush()

注意

  • 使用open函数对于w模式写入文件的时候,文件不存在则会创建文件,文件存在则会覆盖原文件内容;对于a模式文件不存在则会创建文件,文件存在则会在源文件基础上追加内容
  • 这里a参数的文件追加是关闭文件后也可以追加,若没关闭文件对于w参数调用写文件始终是追加模式
  • 直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
  • 当调用flush/close的时候,内容会真正写入硬盘
  • 这样做的目的是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写入硬盘)

文件综合案例

需求:将a.txt文件中的内容备份到b.txt文件中

a.txt内容

代码实现

#打开a.txt文件
fr=open("D:/test/a.txt","r",encoding="UTF-8")
#打开b.txt文件,准备写入
fw=open("D:/test/b.txt","w",encoding="UTF-8")
#读取a.txt文件的所有数据
for line in fr:
    #将每次读取的数据写入b.txt
    fw.write(line)
#将内存中的数据刷新至硬盘
fw.flush()
#关流
fw.close()
fr.close()

b.txt文件

目录操作

前言

  • os模块是python内置与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同操作系统上运行,得到的结果可能不一样
  • os模块与os.path模块用于对目录或文件进行操作,其是python系统自带的一个模块

os模块

使用前:import os

具体方法 

import os
#执行命令行语句
os.system("python -V")
#直接启动文件
os.startfile("D:/test/a.txt")
#返回指定路径下的文件和目录信息
print(f"文件和目录信息:{os.listdir('D:/app/youdao')}")
#创建目录
os.mkdir("D:/test/dir1")
#创建多级目录
os.makedirs("D:/test/dir2/dir3")
#删除目录
os.rmdir("D:/test/dir1")
#删除多级目录
os.removedirs("D:/test/dir2/dir3")
#设置当前工作目录
os.chdir("D:/test")
#当前的工作目录
print(f"当前的工作目录为{os.getcwd()}")

os.path模块

使用前:import os.path

具体方法 

import os.path
#获取当前位置的绝对路径(end.py为当前位置的文件)
print(os.path.abspath("end.py"))
#判断当前文件夹下的文件或目录是否存在
print(os.path.exists("end.py"))
#将目录与目录或目录与文件名拼接
print(os.path.join("D\python", "app.txt"))#D\python\app.txt
#分离路径和文件名
print(os.path.split("D:\projects\end.py"))#('D:\\projects', 'end.py')
#分离文件名和扩展名
print(os.path.splitext("app.py"))#('app', '.py')
#从一个目录中提取文件名
print(os.path.basename("D:\projects\end.py"))#end.py
#从一个目录中提取目录不包括文件名
print(os.path.dirname("D:\projects\end.py"))#D:\projects
#判断是否为目录(有end.py不是)
print(os.path.isdir("D:\projects\end.py"))#False

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

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

相关文章

【在英伟达nvidia的jetson-orin-nx上使用调试can基础收发-硬件连接-开机自启动can-初步调试】

【在英伟达nvidia的jetson-orin-nx上使用调试can基础收发-硬件连接-开机自启动can-初步调试】 1、概述2、实验环境3、自我学习4-1、实验过程1、硬件原理图焊接连接模块2、输入命令3、测试过程 4-2、目前遗留问题# 1-1、发送可以发送,但是PC发送数据收不到。# 1-2、接…

任务 13、MidJourney种子激发极致创作,绘制震撼连贯画作

13.1 任务概述 通过本次实验任务,学员将深入了解Midjourney种子的概念和重要性,以及种子对生成图像的影响。他们将学会在Midjourney平台中设置种子值并调整其参数,以达到所需的效果。此外,任务还详细介绍了Midjourney V4.0版本中…

周末作业 c高级

1.判断家目录下,普通文件的个数和目录文件的个数: #!/bin/bash arr1(ls -la ~/|cut -d r -f 1|grep -wi d) arr2(ls -la ~/|cut -d r -f 1|grep -wi -)echo "普通文件个数为:${#arr2[*]}" echo "目录文件个数为:$…

【TypeScript】TS接口interface类型(三)

【TypeScript】TS接口interface类型(三) 【TypeScript】TS接口interface类型(三)一、接口类型二、实践使用2.1 常规类型2.2 设置属性只读 readonly2.3 设置索引签名2.4 设置可选属性2.5 函数类型接口 一、接口类型 TypeScript中的…

没有配置redis但是报错连接redis失败

问题 没有配置redis但是报错连接redis失败 检查maven配置是否引入了redis依赖(可能是传递依赖,最好检查引进来的公共工程 解决办法 只需要在该工程application.yml文件中配置一下 redis就好,或者移除redis依赖

高效处理矢量大数据的高可用解决方案

高效处理矢量大数据的高可用解决方案 解决方案目标 存储海量矢量数据实时分析海量矢量数据实现海量矢量数据的可视化提供高可用、高性能和高可拓展性解决方案概述 海量数据查询与可视化 系统技术流程 方案一 数据存储: PostgreSQL+PostGIS(矢量数据存储和空间分析)数据服务…

企业场景--技术场景

目录 单点登录如何实现 使用jwt解决单点登录 总结 ​编辑 权限认证如何实现 五张表实现权限认证 框架 具体案例 上传数据的安全性如何控制 对称加密 非对称加密 你的项目遇到了哪些棘手的问题? 项目中日志怎么采集的 ELK进行日志采集 logstash kibana操…

P25LED透明屏:在商业广告中,透明显示效果怎么样?

P25LED透明屏是一种新型的显示屏技术,它具有高透明度和高亮度的特点,可以实现透明显示效果。 P25LED透明屏广泛应用于商业广告、展览展示、户外广告等领域,具有很大的市场潜力。 P25LED透明屏采用了先进的LED显示技术,具有高亮度…

浅析RabbitMQ死信队列

原文首发于公众号【CSJerry】 在现代分布式系统中,消息队列扮演着至关重要的角色。它们可以实现应用程序之间的异步通信,并确保数据的可靠传输和处理。而在这个领域中,RabbitMQ作为一种强大而受欢迎的消息队列解决方案,具备了高…

c语言——求n之内的素数和

//求n之内的素数和 //列如&#xff1a;2、3、5等 #include<stdio.h> #include<math.h> int main() {int i,j,k,n0;scanf("%d",&n);for(i2;i<n;i){k(int)sqrt(i);for(j2;j<k;j)if(i%j0)break;if(j>k){printf("%d,",i);n;if(n%50)p…

23.8.5总结(Web博客项目)

用户搜索&#xff0c;标签搜索。 主页面加上了标签和用户推荐 管理员页面还需要修改 还有这些功能点没有实现&#xff1a; 右键删除评论 点赞次数已达上限 删除博客 消息页面&#xff0c;收消息&#xff08;点赞和收藏要给被点赞这个博主发消息&#xff09; 管理员页面&#…

day52-Redis

Redis 1.Redis 1.1 RESP连接Redis 1.2 定义&#xff1a;是一个高性能的key-value数据库&#xff08;非关系型数据库&#xff09; 1.3 数据类型&#xff1a; key键的类型是字符串类型&#xff1b; 值的类型有五种&#xff1a;字符串String&#xff0c;哈希hash&#xff0…

layui之layer弹出层的icon数字及效果展示

layer的icon样式 icon如果在信息提示弹出层值(type为0)可以传入0-6&#xff0c;icon与图标对应关系如下&#xff1a; 如果是加载层&#xff08;type为3&#xff09;可以传入0-2&#xff0c;icon与图标对应关系如下&#xff1a;

javaAPI(五):System、Math、BigInteger、BigDecimal

System类 System类代表系统&#xff0c;系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。 由于该类的构造器是private的&#xff0c;所以无法创建该类的对象&#xff0c;也就是无法实例化该类。其内部的成员&#xff0c;所以也可以很方便的进行调用。变量…

STM32入门学习之独立看门狗(IWDG)

1.STM32的独立看门狗是一个具有独立时钟的片上外设。通常&#xff0c;为了防止程序卡死&#xff0c;可以设置看门狗定时复位。当看看门狗被使能之后&#xff0c;会按初始化时设置的计数值进行计数。当根据计数值计数的倒数时间为0时&#xff0c;便会自动复位程序&#xff0c;即…

嵌入式开发学习(STC51-12-I2C/IIC)

内容 在数码管右3位显示数字&#xff0c;从0开始&#xff0c;按K1键将数据写入到EEPROM内保存&#xff0c;按K2键读取EEPROM内保存的数据&#xff0c;按K3键显示数据加1&#xff0c;按K4键显示数据清零&#xff0c;最大能写入的数据是255&#xff1b; I2C介绍 I2C简介 I2C&…

CNN成长路:从AlexNet到EfficientNet(01)

一、说明 在 10年的深度学习中&#xff0c;进步是多么迅速&#xff01;早在 2012 年&#xff0c;Alexnet 在 ImageNet 上的准确率就达到了 63.3% 的 Top-1。现在&#xff0c;我们超过90%的EfficientNet架构和师生训练&#xff08;teacher-student&#xff09;。 如果我们在 Ima…

echarts 饼图的label放置于labelLine引导线上方

一般的饼图基础配置后长这样。 想要实现将文本放置在引导线上方&#xff0c;效果长这样 const options {// ...series: [{label: {padding: [0, -40],},labelLine: {length: 10,length2: 50,},labelLayout: {verticalAlign: "bottom",dy: -10,},},], };label.padd…

2配置篇:基础功能配置

前言 在上一章节中,我们学习了 NestJS CLI 的用法,得到了一套基础的项目工程。最开始做项目对比的时候也提到过,NestJS 作为一款自定义程度较高的框架,CLI 直接提供的基础功能虽然并不完善,但同时也为开发者提供了非常多的内置或配套的功能例如高速缓存、日志拦截、过滤器…

栈和队列(一) 栈操作详解

文章目录 一、物理结构和逻辑结构二、栈1、什么是栈2、栈中一些基本操作的实现Stack.hStack.c栈的初始化栈的销毁入栈出栈获得栈顶元素获得栈的元素数判断栈空 三、利用栈解决问题 一、物理结构和逻辑结构 栈和队列都属于逻辑结构&#xff0c;它们既可以用数组实现也可以用链表…