Python基础:18、Python文件操作

1)文件的编码
  1. 什么是编码?

    编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。

    编码有许多中,我们最常用的是UTF-8编码

  2. 为什么需要使用编码?

    计算机只认识0和1,所以需要将内容翻译成0和1才能保存在计算机中。

    同时也需要编码, 将计算机保存的0和1,反向翻译回可以识别的内容

2)文件的读写

打开、关闭、读、写

1.open() 打开函数

open(name, mode, encoding)
open("文件路径", "打开文件的模式",encoding="编码格式")

name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。

mode:设置打开文件的模式(访问模式):只读、写入、追加等。

encoding:编码格式(推荐使用UTF-8)

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

read()方法

文件对象.read(num)

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

readlines()方法

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

readline()方法

一次读取一行内容

# 打开文件
f = open("C:/Users/Lenovo/Desktop/txt/1.txt", "r", encoding="gbk")
print(type(f))
​
# 读取文件 - read()
# Read = f.read(10)
# print(f"读取10个字节的结果是:{Read}")
# print(f"read()方法读取的结果是:{f.read()}")
​
# 读取文件 - readLines()
# lines = f.readlines()
# print(f"lines对象的类型是:{type(lines)}")
# print(f"lines对象的内容是:{lines}")
​
# 读取文件 - readLine()
line1 = f.readline()
line2 = f.readline()
line3 = f.readline()
print(f"第一行数据是:{line1}")
print(f"第二行数据是:{line2}")
print(f"第三行数据是:{line3}")
​
# for循环读取文件行
for line in f:print(f"每一行数据是:{line}")
​
# 文件的关闭
f.close()

注意:文件读取完成后,要使用文件对象.close()方法关闭文件对象,否则文件会被一直占用

with open方法

# with open 语法操作文件    执行完程序后会自动的close
with open("C:/Users/Lenovo/Desktop/txt/1.txt", "r", encoding="gbk") as f:for line in f:print(f"with open每一行数据是:{line}")

总结:

操作功能
文件对象 = open(file, mode, encoding)打开文件获得文件对象
文件对象.read(num)读取指定长度字节 不指定num读取文件全部
文件对象.readline()读取一行
文件对象.readlines()读取全部行,得到列表
for line in 文件对象for循环文件行,一次循环得到一行数据
文件对象.close()关闭文件对象
with open() as f通过with open语法打开文件,可以自动关闭

例子:

"""
通过文件读取操作,统计itheima单词出现的次数
​
itheima itcast python
itheima python itcast
beijing shanghai itheima
shenzhen guangzhou itheima
wuhan hangzhou itheima
zhengzhou bigdata itheima
​
"""
f = open("F:/Vscode-project/Python_project/Word.txt", "r", encoding="utf-8")
# 方式1,读取全部内容,通过字符串count方式统计itheima单词的数量
# Read = f.read()
# print(f"文件的内容是:{Read}")
#
# count = Read.count("itheima")
# print(f"单词itheima在文件中出现的次数是:{count}次")
​
# 方式2:一行行读取
count = 0
for line in f:line = line.strip()  # 去除首尾的空格以及换行符words = line.split(" ")for word in words:# 判断单词出现的次数累计if word == "itheima":count += 1
​
print(f"单词itheima在文件中出现的次数是:{count}次")
​
# 关闭文件
f.close()
单词itheima在文件中出现的次数是:6次

3)文件的写入

# 1. 打开文件

f = open('python.txt', 'w')

 # 2. 文件写入

f.write('hello world')

 #3.内容刷新

f.flush()

注意:

  • 直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区

  • 当调用flush的时候,内容会真正写入文件

  • 这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)

# 打开文件,不存在的文件
f = open("F:/Vscode-project/Python_project/test_txt/2.txt", "w", encoding="UTF-8")
​
# write写入
f.write("hello world!")  # 内容写到内存中
​
# flush刷新
f.flush()      # 将内存中积攒的内容,写入到硬盘的文件中
​
# 关闭文件
f.close()      # close的方法,内置了flush的功能
  1. 写入文件使用open函数的”w”模式进行写入

  2. 写入的方法有:

    •wirte(),写入内容

    •flush(),刷新内容到硬盘中

  3. 注意事项:

  • w模式,文件不存在,会创建新文件

  • w模式,文件存在,会清空原有内容

  • close()方法,带有flush()方法的功能

4)文件的追加

注意:

  • a模式,文件不存在会创建文件

  • a模式,文件存在会在最后,追加写入文件

# 打开文件,不存在的文件
f = open("F:/Vscode-project/Python_project/test_txt/3.txt", "a", encoding="UTF-8")
​
# write写入
f.write("hello world!")  # 内容写到内存中
​
# flush刷新
f.flush()      # 将内存中积攒的内容,写入到硬盘的文件中
​
# 关闭文件
f.close()      # close的方法,内置了flush的功能
​
# 打开文件,存在的文件
f = open("F:/Vscode-project/Python_project/test_txt/3.txt", "a", encoding="UTF-8")
​
# write写入
f.write("你好,世界!")  # 内容写到内存中
​
# flush刷新
f.flush()      # 将内存中积攒的内容,写入到硬盘的文件中
​
# 关闭文件
f.close()      # close的方法,内置了flush的功能
  1. 追加写入文件使用open函数的”a”模式进行写入

  2. 追加写入的方法有(和w模式一致):

    wirte(),写入内容

    flush(),刷新内容到硬盘中

  3. 注意事项:

    a模式,文件不存在,会创建新文件

    a模式,文件存在,会在原有内容后面继续写入

    可以使用”\n”来写出换行符

5)文件操作的综合案例

例子:文件备份

# 完成文件的备份,将测试部分数据丢弃
# 打开bill.txt文件
f1 = open("F:/Vscode-project/Python_project/test_txt/bill.txt", "r", encoding="UTF-8")
​
# 打开bill.txt.bak文件
f2 = open("F:/Vscode-project/Python_project/test_txt/bill.txt.bak", "w", encoding="UTF-8")
​
# 循环读取f1的内容
for line in f1:line = line.strip()# 写入内容if line.split(",")[4] == "测试":continue
​f2.write(line)# 由于前面的内容进行了strip()的操作,需要手动的写出换行符f2.write("\n")
​
# 关闭f1,f2
f1.close()
f2.close()

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

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

相关文章

Ubuntu20.04卸载ros2 foxy版本安装ros1 noetic版本

前言 如果你ubuntu中没有ros,可以试着直接从鱼香ros一键安装包指令处开始。 卸载ros2 sudo apt-get remove ros-*接下来如果你直接使用鱼香ros的一键安装命令,会出错。 设置源 设置源,这里使用的是中科大的。 sudo sh -c . /etc/lsb-r…

基于SpringBoot+Vue+Uniapp家具购物小程序的设计与实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而…

3个方法快速恢复微信已过期或被清理图片

微信作为现在国内用户数量最多的社交软件,已经成为了许多人日常生活和工作中必不可少的一部分。但微信中的图片有时会因为多种原因而消失,如过期、被清理或者误删。遇到这种情况,那么已过期或被清理的图片还能恢复吗?下面小编就来…

论文速读:通过目标感知双分支蒸馏进行跨域目标检测(CVPR2022)

原文标题:Cross Domain Object Detection by Target-Perceived Dual Branch Distillation 中文标题:通过目标感知双分支蒸馏进行跨域目标检测 论文地址: https://arxiv.org/abs/2205.01291 代码地址: GitHub - Feobi1999/TDD 这篇…

在IDEA中配置Selenium和WebDriver

前言: 在当今自动化测试和网络爬虫的领域,Selenium是一个被广泛使用的工具。它不仅能够模拟用户与浏览器的交互,还能进行网页测试和数据抓取。而为了使用Selenium与谷歌/Edge浏览器进行自动化测试,配置合适的WebDriver至关重要。本…

Java--练习--DVD管理系统

一、详细代码 package demo2.Test;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner;public class DVD2 {//DVD管理系统//声明三个数组 用来存储 名称 状态 借出日期 借出次数String[] names new St…

游戏引擎哪家强?选哪一个更有钱途

游戏引擎乃是构筑及开发视频游戏的软件架构。其供应一整套工具与库,以处置常见的游戏开发事务,诸如渲染图形、模拟物理、管控音频等等。凭借对游戏引擎的运用,开发人员能够将精力倾注于构建其游戏的独特之处,而非再度发明此类基础…

【游戏模组】极品飞车12无间风云冬季mod,冬天版本的无间风云你体验过吗

各位好,今天小编给大家带来一款新的高清重置魔改MOD,本次高清重置的游戏叫《极品飞车12无间风云》。 《极品飞车12:无间风云》是由Black Box游戏制作室开发的竞速类游戏,于2008年11月18日在北美首发、2008年11月21日在欧洲先后推…

【深入学习Redis丨第八篇】详解Redis数据持久化机制

前言 Redis支持两种数据持久化方式:RDB方式和AOF方式。前者会根据配置的规则定时将内存中的数据持久化到硬盘上,后者则是在每次执行写命令之后将命令记录下来。两种持久化方式可以单独使用,但是通常会将两者结合使用。 一、持久化 1.1、什么…

MySQL【知识改变命运】04

复习: 1:CURD 1.1Create (创建) 语法: insert [into] 表名 [column[,column]] valuse(value_list)[,vaule_list]... value_list:value,[value]...创建一个实例表: 1.1.1单⾏数据全列插⼊ values_l…

Python爬虫之正则表达式于xpath的使用教学及案例

正则表达式 常用的匹配模式 \d # 匹配任意一个数字 \D # 匹配任意一个非数字 \w # 匹配任意一个单词字符(数字、字母、下划线) \W # 匹配任意一个非单词字符 . # 匹配任意一个字符(除了换行符) [a-z] # 匹配任意一个小写字母 […

CSS之一

目录 简介 CSS 语法规范 CSS 代码风格 1.样式格式书写 2.样式大小写 CSS 基础选择器 选择器分类 标签选择器 类选择器 案例之画盒子 多类型使用 id选择器 通配符选择器 font-family设置字体 字体系列 字体大小 字体粗细 文字样式 字体复合属性 示例 CSS 文…

解决关于HTML+JS + Servlet 实现前后端请求Session不一致的问题

1、前后端不分离情况 在处理session过程中,如果前后端项目在一个容器中,session是可以被获取的。例如如下项目结构: 结构 后端的代码是基本的设置值、获取值、销毁值的内容: 运行结果 由此可见,在前后统一的项目中&a…

《Linux从小白到高手》综合应用篇:详解Linux系统调优之服务器硬件优化

List item 本篇介绍Linux服务器硬件调优。硬件调优主要包括CPU、内存、磁盘、网络等关键硬件组。 1. CPU优化 选择适合的CPU: –根据应用需求选择多核、高频的CPU,以满足高并发和计算密集型任务的需求。CPU缓存优化: –确保CPU缓存&#x…

SAP导出excel报错:发现“EXPORT.XLSX“中的部分内容有问题。是否让我们尽量尝试恢复?如果您信任此工作簿的源,请单击“是”。

1.问题描述:SAP报表程序导出excel的时报错 2.问题原因 文本信息中包含了非法符号(SAP不认识的符号) 比如:NLSY10 3.解决方式,把这个文本信息特殊符号去掉,就可以恢复正常了。 怎么找这个特殊符号&#…

2019年计算机网络408真题解析

第一题: 解析:OSI参考模型第5层完成的功能 首先,我们需要对OSI参考模型很熟悉:从下到上依次是:物理层-数据链路层-网络层- 运输层-会话层-表示层-应用层,由此可知,题目要问的是会话层的主要功能…

第十五章 RabbitMQ延迟消息之延迟插件

目录 一、引言 二、延迟插件安装 2.1. 下载插件 2.2. 安装插件 2.3. 确认插件是否生效 三、核心代码 四、运行效果 五、总结 一、引言 上一章我们讲到通过死信队列组合消息过期时间来实现延迟消息,但相对而言这并不是比较好的方式。它的代码实现相对来说比…

嵌入式开发:STM32 硬件 CRC 使用

测试平台:STM32G474系列 STM32硬件的CRC不占用MCU的资源,计算速度快。由于硬件CRC需要配置一些选项,配置不对就会导致计算结果错误,导致使用上没有软件计算CRC方便。但硬件CRC更快的速度在一些有时间资源要求的场合还是非…

使用python批量替换文件夹文件名(已亲测)

1. 需要使用高版本的python,本机版本 3.12.4 2. 配置国内Python镜像源 常用的国内Python镜像源: 清华大学TUNA镜像源:这是非常受欢迎的一个镜像源,提供了高速且稳定的服务。 地址:https://pypi.tuna.tsinghua.edu.cn/simple 临时…

基于DCGM+Prometheus+Grafana的GPU监控方案

目录 前言一、指标导出器1、DCGM:获取远程节点的信息 2、 DCGM-Exporter收集多节点信息更改收集指标 二、 Prometheus - From metrics to insight修改配置文件查看收集结果 三、Grafana仪表板展示导入数据源创建仪表板更多仪表板 前言 基于DCGM(NVIDIA …