Python学习之路——文件部分【文件的读取】

目录

先解释一下引文的答案

一、open()打开函数

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

三、读-操作相关方法

(一)read方法

(二)readlines方法

(三)with open 语法

(四)操作汇总

(五)注意

(六)代码示例

1、打开文件

2、read读取文件

3、readlines读取文件

4、readline读取文件

5、文件关闭

四、练习案例


先解释一下引文的答案

read返回的是字符串类型,可以指定读取的字节数,不指定默认读取全部

readline返回的是字符串,读取文件内一行的内容

readlines返回的是列表,读取文件内的全部内容,以行为单位,列表内的每一个元素就是一行

一、open()打开函数

在Python中,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下:

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

ctrl + 鼠标左键,进入源码,发现encoding并不是第三个参数,所以要使用关键字参数关键字参数icon-default.png?t=N7T8https://blog.csdn.net/weixin_57154777/article/details/135400272?spm=1001.2014.3001.5501

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

模式描述
r以只读方式打开文件。文件的指针将会放在文件的开头,这是默认模式
w

打开一个文件只用于写入,如果该文件已存在则打开文件,并从开头开始编辑,

原有内容会被删除。如果该文件不存在创建新文件

a

打开一个文件用于追加,如果该文件已存在,新的内容将会被写入到已有的内容之后

如果该文件不存在创建新文件进行写入

三、读-操作相关方法

(一)read方法

文件对象.read(num)

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

(二)readlines方法

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

在D盘下创建一个文件python.txt,里面添加内容如下:

使用readlines读取文件内的内容

f = open('D:/python.txt', 'r', encoding='utf-8')
ff = f.readlines()
for line in ff:print(line)# 也可以
content = f.readlines()
print(content)# 不管前面如何操作,一定要记得关闭文件
f.close()

其中有空白行的就是读取到了\n换行符

(三)with open 语法

with open('D:/python.txt', 'r') as f:f.readlines()
# 通过with open的语句对文件进行操作
# 可以在操作完成后自动关闭文件,避免遗忘掉close方法

(四)操作汇总

操作功能
文件对象 = open(file,mode,encoding)打开文件获得文件对象
文件对象.read(num)

读取指定长度字节

不指定num读取文件全部

文件对象.readline()读取一行
文件对象.readlines()读取全部行,得到列表
for line in 文件对象for循环文件行,依次循环得到一行数据
文件对象.close()关闭文件对象
with open() as f通过with open语法打开文件,可以自动关闭

(五)注意

操作完成之后一定要用close()方法去关闭文件,不然文件就会一直被占用,进行不了其他的操作

(六)代码示例

1、打开文件

2、read读取文件

3、readlines读取文件

    # 打开文件f = open('D:/python.txt', 'r', encoding='utf-8')# 读取文件  read()content01 = f.read()print(content01)# 读取文件  readLines()content02 = f.readlines()print(content02)

思考一下,这段代码会不会报错

是的,虽然不会报错,但是readlines读取不到文件的内容,列表为空

这是为什么呢,当然是因为没有关闭文件咯

    # 打开文件f = open('D:/python.txt', 'r', encoding='utf-8')# 读取文件  read()content01 = f.read()print(content01)# 关闭文件f.close()# 读取文件  readLines()content02 = f.readlines()print(content02)

那现在我添加了关闭文件的方法之后,这样对吗?

答案是不对的,你都把文件关了,还怎么去读取文件里面的内容呢:

这样才是正确的

    # 打开文件f1 = open('D:/python.txt', 'r', encoding='utf-8')# 读取文件  read()content01 = f1.read()print(content01)f1.close()# 读取文件  readLines()f2 = open('D:/python.txt', 'r', encoding='utf-8')content02 = f2.readlines()print(content02)f2.close()

切记一定要关闭文件,如若之后还要操作文件记得要打开,那么要打开就一定要关闭,以此递归思想,绝不会出错

4、readline读取文件

读取文件的一行的内容

    print()print('readline:')# 读取文件  readLine()——————一次读取一行f3 = open('D:/python.txt', 'r', encoding='utf-8')content03 = f3.readline()print(content03)# for循环读取文件行for line in f3:print(line)

5、文件关闭

文件关闭我们就不能只说文件关闭

我们应该

    # 文件的关闭if f3.closed:print('文件关闭成功')else:f3.close()print('文件关闭失败,已执行关闭操作')

    # with open 语法操作文件with open('D:/python.txt', 'r', encoding='utf-8') as f4:print(f4.read())if f4.closed:print('文件关闭成功')else:f4.close()print('文件关闭失败,已执行关闭操作')

四、练习案例

统计单词在文件内出现的次数

文件内准备如下内容:

统计句子中you的出现次数

上操作

def func03():f = open('D:/python.txt', 'r', encoding='utf-8')file_of_str = f.read()file_of_str = file_of_str.strip()file_of_str = file_of_str.replace('\n', ' ')file_of_str = file_of_str.replace('.', ' ')file_of_str = file_of_str.split(' ')print('split', file_of_str, type(file_of_str))count = 0for word in file_of_str:if word == 'you':count += 1print(count)f.close()

详细操作与解释

def func03():# 先打开文件进行读取f = open('D:/python.txt', 'r', encoding='utf-8')# 查看文件是否打开成功# print(f.read())# 或者怕忘记最后去close文件,可以使用# with open('D:/python.txt', 'r', encoding='utf-8') as f:#     print(f.read())# 成功读取文件内容之后,将文件内的句子的换行符和英文结尾符以及逗号都替换为空格# 由于 read 方法读取文件返回的是字符串类型,所以可以file_of_str = f.read()file_of_str = file_of_str.strip()file_of_str = file_of_str.replace('\n', ' ')file_of_str = file_of_str.replace('.', ' ')# 将字符串通过空格进行分隔得到列表(或者一开始就可以使用readlines去获取列表)file_of_str = file_of_str.split(' ')print('split', file_of_str, type(file_of_str))# 遍历列表# 定义一个用于计数的变量,初始化为0count = 0for word in file_of_str:if word == 'you':count += 1print(count)f.close()

再次强调一遍,文件操作完成之后,一定要关闭文件

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

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

相关文章

mysql原理--InnoDB的Buffer Pool

1.缓存的重要性 对于使用 InnoDB 作为存储引擎的表来说,不管是用于存储用户数据的索引(包括聚簇索引和二级索引),还是各种系统数据,都是以 页 的形式存放在 表空间 中的,而所谓的 表空间 只不过是 InnoDB 对…

分布式数据之复制(Replication)

1.简介 1.1简介——使用复制的目的 在分布式系统中,数据通常需要被分散在多台机器上,主要为了达到以下目的: 扩展性,数据量因读写负载巨大,一台机器无法承载,数据分散在多台机器 上可以有效地进行负载均衡…

Beauty algorithm(四)眼影

一、skills 前瞻 略 二、目标区域定位 1、 眼影区域 1、眼部关键点 左侧:36,37,38,39,40,41 右侧:42,43,44,45,46,47 2、计算roi区域的w,h,center 目的调整mask的比列。 FaceRegion left_es, right_es; left_es.w = landmarks.at(39).x - landmarks.at(36).x; left_es.…

php 数组中的元素进行排列组合

需求背景:计算出数组[A,B,C,D]各种排列组合,希望得到的是数据如下图 直接上代码: private function finish_combination($array, &$groupResult [], $splite ,){$result [];$finish_result [];$this->diffArrayItems($array, $…

C/C++输入函数总结

1、cin 2、cin.get 3、cin.getline 4、getline 5、gets 6、getchar 1、cin 可以接受单个字符和字符串,但遇空格,"TAB","回车"结束!!! 若不跳过空白字符,使用 noskipws 流控制。 使用方法如…

基于LangChain+LLM的本地知识库问答:从企业单文档问答到批量文档问答

前言 过去半年,随着ChatGPT的火爆,直接带火了整个LLM这个方向,然LLM毕竟更多是基于过去的经验数据预训练而来,没法获取最新的知识,以及各企业私有的知识 为了获取最新的知识,ChatGPT plus版集成了bing搜索…

作业三详解

作业3: 在作业1的基础上,整合修改、删除功能,可实现如下功能 1.进入新增页面,页面填入新增数据,提交表单,然后跳转到查询列表页面,列表页面显示所有记录(多一条新增的数据&#xff…

QQ邮件发送(PHP的Laravel)

1. 开启 QQ 邮箱的 SMTP 支持 2.里面会一个类似于密码之类(复制一下) 3.然后再 .env文件里面配置一下 MAIL_DRIVERsmtp —— 使用支持 ESMTP 的 SMTP 服务器发送邮件; MAIL_HOSTsmtp.qq.com —— QQ 邮箱的 SMTP 服务器地址,必…

数字图像处理(图像灰度变换、图像直方图及均衡、图像中值滤波、图像空域锐化增强、图像频域滤波)

数字图像处理(图像灰度变换、图像直方图及均衡、图像中值滤波、图像空域锐化增强、图像频域滤波) 目录 1 图像灰度变换 1.1 灰度线性变换 1.2 图像二值化 1.3 负象变换 1.4 灰度非线性变换 1.5 程序设计流程图 2 图像直方图及均衡 2.1 直方图 2…

捕捉“五彩斑斓的黑”:锗基短波红外相机的多种成像应用

红外处于人眼可观察范围以外,为我们了解未知领域提供了新的途径。红外又可以根据波段范围,分为短波红外、中波红外与长波红外。较短的SWIR波长——大约900nm-1700nm——与可见光范围内的光子表现相似。虽然在SWIR中目标的光谱含量不同,但所产…

第34期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大型语言模型(LLM)等安全领域应用的知识。在这里,您可以…

springboot基础

一 springboot 1 spring 的缺点 在spring boot出现以前,使用spring框架的程序员是这样配置web应用环境的,需要大量的xml配置。下图展示了在xml配置的时代和SpringBoot的配置量的差别。 随着web项目集成软件的不断增多,xml配置也不断的增多&…