Python第二语言(五、Python文件相关操作)

目录

1. 文件编码的概念

2. 文件的读取操作

2.1 什么是文件

2.2 open()打开函数

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

2.4 文件操作及案例

3. 文件的写入操作及刷新文件:write与flush

4. 文件的追加操作

5. 文件操作的综合案例(文件备份操作)


导航:

Python第二语言(一、Python start)-CSDN博客

Python第二语言(二、Python语言基础)-CSDN博客

Python第二语言(三、Python函数def)-CSDN博客

Python第二语言(四、Python数据容器)-CSDN博客

Python第二语言(五、Python文件相关操作)-CSDN博客

Python第二语言(六、Python异常)-CSDN博客

Python第二语言(七、Python模块)-CSDN博客

Python第二语言(八、Python包)-CSDN博客

Python第二语言(九、Python第一阶段实操)-CSDN博客

Python第二语言(十、Python面向对象(上))-CSDN博客

Python第二语言(十一、Python面向对象(下))-CSDN博客

Python第二语言(十二、SQL入门和实战)-CSDN博客

Python第二语言(十三、PySpark实战)-CSDN博客

Python第二语言(十四、高阶基础)-CSDN博客

1. 文件编码的概念

常见:UTF-8、GBK、Big5编码等等..与Java一样,所有的计算机编码概念都一样,类型不一样。

2. 文件的读取操作

2.1 什么是文件

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

一篇文章、一段视频、一个可执行程序,都可以被保存为一个文件,并赋予一个文件名。操作系统以文件为单位管理磁盘中的数据。一般来说,文件可分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别。

2.2 open()打开函数

(使用Python操作文件就需要用到open函数)

# open()打开函数
# open(name, mode, encoding)
# name: 是要打开的目标文件名的字符串(可以包含文件所在的具体路径)
# mode: 设置打开文件的模式(访问模式):只读\写入\追加等
# encoding: 编码格式(推荐UTF-8)  在这里需要用关键字参数直接指定,因为encoding不是位置参数
f = open("pythonLearn", 'r', encoding="UTF-8")
# f是`open`函数的文件对象
print(f.read())  # 读取文件内容

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

(mode是open函数的第二个参数,其作用是对文件的操作方式)

open函数中的'w'操作,当前文件打开后,既第一次打开文件的时候会清空文件,但是打开文件后,并没有关闭他,且不断的往里面写入数据,因此可以做到一个备份文件操作。

模式描述
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后,如果该文件不存在,创建新文件进行写入。
2.4 文件操作及案例
  • 当前f的代表open读取文件后的赋值

1. 文件读取操作( 文件对象.read() || 文件对象.readlines() )

  • read() || readlines() 使用注意:当前文件被两个read同时读取的时候,第二个read会从第一个read读取的结尾处继续读取。
  • readlines() || read() 使用注意:当次文件在之前被读取了之后,使用readlines再次读取文件 虽然方法不一样,但是文件还是被read方法所影响,相当于读取文件的时候会有一个指针,read读取完后指针指向哪个点,剩余读取文件的方法就会继续从当前指针继续读写。

1.1 文件对象.read()方法:

        一个文件对象在read时只会读取一次,如果先执行了f.read()方法后,后面的read()读取不会再读取到内容;

f = open("pythonLearn", 'r', encoding="UTF-8")
print(f.read())  # 如果没有传入num, 就会表示读取文件中所有的数据
# print(f.read(4))  # 读取文件内容,可以加上: 文件对象.read(num), num表示读取文件的数据长度(单位是字节)

1.2 文件对象.readlines()方法:

f = open("pythonLearn", 'r', encoding="UTF-8")
# 可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素
print(f.readlines())f.close()  # 关闭文件

2. 文件读取操作(文件对象.readline())

它会一行一行读取数据;

f = open("pythonLearn", 'r', encoding="UTF-8")print(f"第一行数据:{f.readline()}")
print(f"第二行数据:{f.readline()}")

3. 文件的读取操作(for循环)

f = open("pythonLearn", 'r', encoding="UTF-8")for line in f:print(f"文件的行数据是:{line}")  # 每一个line临时变量,记录了文件的一行数据

4. close关闭文件(当前文件读取完毕后都需要关闭次文件,不然次文件一直会被该程序占用)

f = open("pythonLearn", 'r', encoding="UTF-8")
f.close()  # 关闭文件对象,关闭对文件的占用,如果不关闭就代表整个文件一直被python占用

5. with open语法(文件操作后自动关闭)

with open("pythonLearn", 'r', encoding="UTF-8") as f:print(f.readlines())  # 在with open语句块中对文件进行操作,它会自动关闭close文件,避免遗忘

6. 读取文件中一个单词出现的次数案例

6.1 使用count对字符串的指定单词计数:

f = open("pythonLearn", 'r', encoding="UTF-8")# 方式1:读取全部内容,通过count方法统计python单词数量
count = f.read().count("python")
print(f"python在文件中出现了:{count}次")

6.2 使用for循环:

f = open("pythonLearn", 'r', encoding="UTF-8")
count = 0  # 计数
for line in f:line = line.strip()  # 去除开头和结尾的空格以及换行符words = line.split(",")for word in words:if word == "python":count += 1
print(f"python出现的次数是:{count}")
f.close()

3. 文件的写入操作及刷新文件:write与flush

  • write与flush需要一起使用,因为此写入只是写道了python的内存中(或叫缓冲区),在flush后才是写入到真正的文件中,或者使用close()方法,关闭后会自动flush刷新,这样做是避免频繁的操作硬盘,导致效率下降(一堆,一次性写磁盘;
  • write写入文件的时候,如果此文件不存在,那么就会创建一个新文件;
# 1.打开文件
f = open('my_txt', 'w')# 2.文件写入
f.write("# 张三律师")# 3.内容刷新
f.flush()

4. 文件的追加操作

  • 'w' 代表mode中的第二种模式,文件存在则清空此文件,写入数据,文件不存在则创建一个新文件,插入数据;
  • 'a' 代表mode中的第三种模式,追加数据在文件中;
    • 文件不存在会创建文件;
    • 文件存在会在最后,追加写入文件;
# 1.打开文件
f = open('my_txt', 'a')# 2.文件追加
f.write("# 尊师重道")# 3.内容刷新
f.flush()

5. 文件操作的综合案例(文件备份操作)

我的思路:open函数中的'w'操作,当前文件打开后,既第一次打开文件的时候会清空文件,但是打开文件后,并没有关闭他,且不断的往里面写入数据,因此可以做到一个备份文件操作。

# 1.打开文件获取文件对象
fr = open('my_txt', "r", encoding="UTF-8")
# 准备写入的文件对象
fw = open('my_text_copy', "w", encoding="UTF-8")for line in fr:line = line.strip()  # 去除字符串前后空格fw.write(line)  # 写入到新文件fw.write("\n")  # 写入后换行fr.close()
fw.close()

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

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

相关文章

Linux文件系统讲解!

一、Linux文件系统历史 1、在早期的时候Linux各种不同发行版拥有自己各自自定义的文件系统层级结构。 2、当我用Red hat转向玩Debian时,我进入/etc我都是懵的。 3、后来Linux社区做了一个标准、FHS(文件系统标准层次结构)。来帮助Linux系统的…

1_常见指令【Linux中常见30个指令的学习和使用】【万字长文】

常见指令以及权限理解 开始学习linux前的注意事项 在学习linux之前,我们要知道linux是一个操作系统。 那操作系统是什么呢?(这里只做大概了解) 操作系统就是一个管理软硬件的软件。 它对上提供良好(稳定、高效、安…

做材料科学领域研究热点:高通量多尺度材料计算和机器学习

研究背景 材料科学是一个重要领域,涉及物质的研究和利用。随着科技进步,材料学已成为多学科交叉的前沿领域之一,融合物理、化学、数学、信息、力学和计算科学等知识。寻找更坚固的新材料已成为当今急需解决的问题。 材料基因工程作为一项颠覆…

Spring boot 注解实现幂等性

1. 添加 Spring AOP 依赖 在 pom.xml 中添加如下依赖&#xff1a; <dependencies><!-- Spring AOP dependency --><dependency><groupIdorg.springframework.boot</groupId><artifactIdspring-boot-starter-aop</artifactId></depend…

C++入门小结

C命名空间总结 C 中的命名空间&#xff08;Namespace&#xff09;是一种组织代码的方式&#xff0c;用于避免全局命名冲突。在同一个命名空间中&#xff0c;可以有相同名称的变量、函数和类&#xff0c;但它们彼此互不影响。下面是对 C 命名空间的一些总结&#xff1a; 定义命…

使用Java实现自定义的ClassLoader

Java类加载机制是Java虚拟机&#xff08;JVM&#xff09;中非常重要的部分&#xff0c;它负责将字节码加载到内存中&#xff0c;并生成对应的Class对象。在Java中&#xff0c;类加载器&#xff08;ClassLoader&#xff09;是这一过程的核心组件。了解和实现自定义的ClassLoader…

IOS中使用input页面被聚焦放大

IOS中使用input页面被聚焦放大 解决方案&#xff1a; 第一步&#xff0c;head标签中设置如下meta <meta name"viewport" content"widthdevice-width,initial-scale1.0,user-scalableno">第二步&#xff0c;增加如下meta <!--兼容ios设备input聚…

长亭Nginx入门

在学习Nginx时我们先学习下防火墙原理】 将流量代理给防火墙 这样WAF 会分析流量 防火墙安装网络拓扑图 流量给防火墙 再给负载均衡 反向代理这个网络拓扑图是 防火墙充当了反向代理角色 所以我们就知道了我们为了要学习Nginx 因为这个服务器支持很多功能模块 自己本身就能…

开源项目-Docker部署学之思管理系统

开源-Docker部署学之思管理系统 文章目录 开源-Docker部署学之思管理系统资源列表基础环境一、安装Docker二、配置加速器三、查看Docker版本四、Git获取源码五、编辑SQL脚本六、访问管理系统如果访问或者登录的时候出现内部服务错误&#xff0c;评论或私信&#xff0c;我给你解…

Cisco Packet Tracer实验(三)

续实验二 问题一&#xff1a;使用二层交换机连接的网络需要配置网关吗&#xff1f;为什么&#xff1f; 二层交换机作为网络设备中的一种&#xff0c;主要用于在局域网&#xff08;LAN&#xff09;内部进行数据包的转发。它工作在OSI模型的第二层&#xff08;数据链路层&#xf…

超维小课堂 | 7、ROS使用offboard模式控制无人机定点悬停源码分析

引言&#xff1a;ROS使用offboard模式控制无人机进入定点悬停是学习ROS无人机控制的最经典的基本功能之一。基于此&#xff0c;本篇主要对此处的控制流程著一个简要的代码分析。&#xff08;室内外通用代码&#xff09; 顾名思义&#xff1a;offboard模式下的定点悬停是指通过…

SpringSecurity6从入门到实战之SpringSecurity6自定义认证规则

SpringSecurity6从入门到实战之SpringSecurity6自定义认证规则 Spring Security 中默认所有的 http 请求都需要先认证通过后&#xff0c;才能访问。那么&#xff0c; 如何指定不需要认证就可以直接访问的资源呢&#xff1f;比如 用户的登录页面和注册页面&#xff0c;都是不需要…

ramda函数式编程库--可以帮助处理不可变数据

ramda 介绍深拷贝与浅拷贝示例代码**使用 clone 函数****clone 函数也可以用来深拷贝数组&#xff1a;** 介绍 ramda 是一个功能强大的函数式编程库&#xff0c;可以帮助你处理不可变数据。 clone 是 ramda 中的一个函数&#xff0c;用于深拷贝对象或数组。以下是关于 clone 函…

内网管理软件IP-Guard实施方案

1. 引言 本方案旨在指导企业如何实施内网管理软件IP-Guard&#xff0c;通过服务器的安装、员工客户端的部署以及基本策略的定制&#xff0c;实现对企业内部网络的有效管理和监控。IP-Guard是一款集成了设备管控、数据防泄漏、日志审计等多种功能于一体的内网安全管理软件&…

【面试干货】深入理解Java中的final关键字

【面试干货】深入理解Java中的final关键字 一、被 final 修饰的类二、被 final 修饰的方法三、被 final 修饰的变量四、被 final 修饰的常量 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;final关键字有多种用途&…

C++ Primer 学习 -- Day 1

第 1、2 章知识点总结 1、Hello&#xff0c;World&#xff01;1.1、输入输出1.2、while(std::cin >> value) 2、变量和基本类型2.1.1、unsigned建议 2.1.2 类型转换建议建议 2.2.1 变量定义提醒列表初始化提醒 2.2.2 变量声明和定义提醒 2.3.1 引用引用特点 2.3.2 指针指…

快人一步!利用LLM实现数据处理自动化

使用大型语言模型&#xff08;LLM&#xff09;来帮助处理数据具有以下几个主要优势&#xff1a; 1. 自动化处理 LLM能够自动处理大量的重复性任务&#xff0c;减少人工干预&#xff0c;从而提高数据处理效率。例如&#xff0c;它可以自动完成数据加载、预处理、筛选、去重和合并…

RV32F\RV32D指令集

RV32F\RV32D指令集 F扩展1、浮点控制状态寄存器2、指令类型F扩展 F扩展增加了32个浮点寄存器f0-f31,每个32位宽,以及一个浮点控制和状态寄存器fcsr,其中包含浮点单元的工作模式和异常状态。FLEN=32表示F单精度浮点扩展,大多数浮点指令对浮点寄存器中的值进行操作。浮点加载…

基于JSP技术的电子商城系统

开头语&#xff1a; 你好&#xff0c;我是计算机学长码农猫哥。如果你对电子商城系统感兴趣或有相关开发需求&#xff0c;欢迎联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;Eclipse、Tomcat 系统展示 首页 管理…

08_基于GAN实现人脸图像超分辨率重建实战_超分辨基础理论

1. 超分辨的概念与应用 我们常说的图像分辨率指的是图像长边像素数与图像短边像素数的乘积,比如iPhoneX手机拍摄照片的分辨率为 4032px3024px,为1200万像素。 显然,越高的分辨率能获得更清晰的成像。与之同时,分辨率越高也意味着更大的存储空间,对于空间非常有限的移动设…