从文件中读取数据:

1:读取整个文件
首先创建一个文件,它包含一些文本信息,注意:如果该文件为.py文件,则再进行操作的时候可以不写路径,如果不是.py文件,则必须标明路径。

现在我们创建一个python文件,名为text.py,给他写入如下文本信息:

下面的程序打开并读取这个文件,再将其内容显示到屏幕上:

with open('text.py') as pythonProject2:#open(要打开的文件名称)
#open函数返回一个表示文件test.py的对象,python将该对象赋给pythonProject2cc=pythonProject2.read()
print(cc)

python在当前执行的文件所在目录中查找指定的文件
关键字 with 在不再需要访问文件后将其关闭在这个程序中,注意到我们调用了 open(),但没有调用 close()。也可以调用 open()和 close()来打开和关闭文件,但这样做时,如果程序存在 bug 导致方法 close()未执行,文件将不会关闭。这看似微不足道,但未妥善关闭文件可能导致数据丢失或受损。如果在程序中过早调用 close(),你会发现需要使用文件时它已关闭(无法访问),这会导致更多的错误。并非在任何情况下都能轻松确定关闭文件的恰当时机,但通过使用前面所示的结构(with open(需要打开的文件名称) as 赋给另一个对象),可让 Python 去确定:你只管打开文件,并在需要时使用它,Python 自会在合适的时候自动将其关闭。

细心的同学已经发现了,我们上文所输出的内容多了一行空格,原因是:read()到达文件末尾的时候返回一个空的字符串,而将这个空字符串显示出来就是一个空格,而想要删除空行只需要使用我们之前学习过的rstrip()函数。

为什么要提供文件路径?

将类似于 .txt 的简单文件名传递给函数 open()时,Python 将在当前执行的文件(即物程序文件)所在的目录中查找

根据你组织文件的方式,有时可能要打开不在程序文件所属目录中的文件。例如,你可能将程序文件存储在了文件夹 python_work
中,而该文件夹中有一个名为 text_files 的文件夹用于存储程序文件操作的文本文件。虽然文件夹 text_files 包含在文件夹
python_work 中,但仅向 open()传递位于前者中的文件名称也不可行,因为 Python 只在文件夹 python_work
中查找,而不会在其子文件夹 text_files 中查找。要让 Python 打开不与程序文件位于同一个目录中的文件,需要提供文件路径,让
Python 到系统的特定位置去查找。

否则会出现如下图所示:python会告诉你找不到该文件
那么该怎么解决这个问题呢?
这里我们就需要用绝对路径,例如,我们现在建立一个.txt在桌面。
下面我们使用相对路径(仅提供文件名的方式),去打开:

with open(r"新建文本文档.txt",'r',encoding='utf-8') as f:ff=f.read()
print(ff)

我们发现文件根本打不开。
现在我们使用绝对路径(提供具体的位置信息),去打开:

with open(r"C:\Users\Lenovo\Desktop\新建文本文档.txt",'r',encoding='utf-8') as f:ff=f.read()
print(ff)

文件内容被很好的显示出来了。

注:encoding='utf-8的作用是为了避免出现乱码。

上图所示程序,不加encoding='utf-8,就会出现以下情况;

注:显示文件路径时,Windows系统使用反斜杠(\),而不是斜杠(/),但在代码中仍可以使用斜杠。

如果在文件路径中直接使用反斜杠,将引发错误,因为反斜杠用于对字符串中的字符进行转义。
举例:

C:\path\to\file.txt

其中的\t会被解读为制表符,如果一定要使用反斜杠,可对相对路径中的每个反斜杠都进行转义:

C:\\path\\to\\file.txt

逐行读取:

读取文件时,常常需要检查其中的每一行:可能要在文件中查找特定的信息,或者要以某种方式修改文件中的文本。

直接使用for循环的方法:

在该目录下的文件读取:

for line in open("123.txt",encoding='utf-8'):print(line)

计算机其他位置中的:

for line in open(r"C:\Users\Lenovo\Desktop\新建文本文档.txt",encoding='utf-8'):print(line)

使用while循环:

在该目录下的文件读取:

f=open("123.txt",encoding='utf-8')
line=f.readline()
while line:print(line)line=f.readline()
f.close()

计算机其他位置中的:

f=open(r"C:\Users\Lenovo\Desktop\新建文本文档.txt",encoding='utf-8')
line=f.readline()
while line:print(line)line=f.readline()
f.close()

使用with…as结构:

在该目录下的文件读取:

with open("123.txt",encoding='utf-8') as f:for line  in f:print(line)

计算机其他位置中的:

with open(r"C:\Users\Lenovo\Desktop\新建文本文档.txt",encoding='utf-8') as f:for line in f:print(line)

运行上面两个文件的结果:

hi,python早上好晚上好你好
窗前明月光,疑似地上霜举头望明月,低头思归乡鹅鹅鹅,曲项向天歌白毛浮绿水,红掌拨清波

我们不难发现,空白行变得更多了,原因是:在这个文件中,每行末尾都有一个看不见的换行符,而print函数在调用的时候也会产生一个换行符,因此每行末尾都会有两个换行符,一个来自文件,一个来自print函数的调用,要想消除这些换行符,可在调用print函数的时候,使用rstrip():

 print(line.rstrip())

处理之后的结果:

窗前明月光,疑似地上霜
举头望明月,低头思归乡
鹅鹅鹅,曲项向天歌
白毛浮绿水,红掌拨清波
hi,python
早上好
晚上好
你好

创建一个包含文件各行内容的列表:

使用关键字 with 时,open()返回的文件对象只在 with 代码块内可用。如果要在 with 代码块外访问文件的内容,可在 with 代码块内将文件的各行存储在一个列表中,并在 with 代码块外使用该列表:可以立即处理文件的各个部分,也可以推迟到程序后面再处理。

with open("123.txt",encoding='utf-8') as f:lines=f.readlines()#使用readlines()从文件中读取每一行,并将其存储在一个列表中//这样处理后,在with代码块外仍然可以使用变量lines
for line  in lines:print(line)

输出结果:

hi,python早上好晚上好你好

使用文件中的内容:

举例:

with open("123.txt",encoding='utf-8') as f:lines=f.readlines()
pi=str()#创建空的字符串用于存储文本内容
for line  in lines:pi+=line.rstrip()#将每行末尾的空行去掉
print(pi)
print(len(pi))#输出字符串的长度
1234562345671038417968539
25

注:读取文本文件的时候,python会自动将所有的文本文件解读成字符串,如果文本文件中的内容为数值,并且要作为数值使用,就必须使用int()函数,或者float()函数将其进行转化。
举例:
如果上述例子中的123.txt中的内容要作为数值使用,则程序应进行修改:
如下:

with open("123.txt",encoding='utf-8') as f:lines=f.readlines()
pi=int()#进行强制转化
#pi=float()
for line  in lines:pi+=int(line)#pi+=float(line)
print(pi)
1038418326562

包含千位以上的大型文件:

前面我们所分析的都是包含几行的文本文件,现在假设我们有一个文件,其中包含精确到小数点后千位而不是30位的圆周率,也可创建一个字符串将他包含到里面,有的小伙伴想到这个问题会觉得很棘手,程序该怎么写呢?

其实,我们前面编撰好的程序就可以直接进行传递使用

with open("123.txt",encoding='utf-8') as f:lines=f.readlines()
pi=str()#创建空的字符串用于存储文本内容
for line  in lines:pi+=line.rstrip()#将每行末尾的空行去掉
print(f"{pi[:52]}.....")#为了避免显示的内容不停的滚动,只打印前52位
print(len(pi))#输出字符串的长度
1234562345671038417968539168519635885951538287826636.....
1596

同理,对于万位,百万位等等更大的文件,我们的程序仍然可以使用。

圆周率中包含你的生日吗?

with open("123.txt",encoding='utf-8') as f:lines=f.readlines()
pi=str()#创建空的字符串用于存储文本内容
for line  in lines:pi+=line.rstrip()#将每行末尾的空行去掉
you_birthday=str(input("请输入你的生日"))
if you_birthday in pi:print("yes")
else:print("NO")
请输入你的生日0904
yes

写入文件:

1:写入空文件:

要将文本写入文件,你在调用open()时,需要提供另一个参数,告诉python,你要写入打开的文件.
举例:

with open("123.txt",'w',encoding='utf-8') as f:f.write("晚上好")

打开该文件:

#open(名称,操作模式 )#操作模式包括:w:写,r:读取 ,a:附加,r+:读写`

如果省略了操作模式,python自动以只读的方式打开,如果要写入的文件不存在,python的open()函数将自动创建它,以写入的模式(w)打开,如果该文件已存在,则python会自动清空之前的内容

python只能将字符串写入文本文件文件,要是想将数据存储到文本文件中,需要先用str()将其转化为字符串格式。

写入多行:

函数write()不会在写入的文本末尾添加换行符,因此如果写入多行时没有指定换行符,文件看起来可能不是我们想要的那样:
举例:

with open("123.txt",'w',encoding='utf-8') as f:f.write("早上好---good morning")f.write("中午好---good afternoon")f.write("晚上好---good evening")

如下图所示,所有的内容都被显示在一行:
怎么解决这种问题呢?需要在方法调用write()中包含换行符

with open("123.txt",'w',encoding='utf-8') as f:f.write("早上好---good morning\n")f.write("中午好---good afternoon\n")f.write("晚上好---good evening\n")

现在文本内容呈现在不同行中:
像显示到终端一样,还可以使用空格,制表符和空行来设置这些输出的格式。

附加到文件:

如果要给文件添加内容而不是覆盖原来的内容,可以以附加模式打开文件,以附加模式打开文件时,python不会在返回文件对象前清空文件的内容,而是将写入文件的行添加到文件末尾,如果指定的文件不存在,python会为你创建一个空文件。
举例:

with open("123.txt",'a',encoding='utf-8') as f:#以附加模式打开f.write("hello,world")#将hello,world写入文件

原内容并没有被清空。

python文件操作和异常之文件的操作相关推荐

  1. 【python】错误、异常和文件---复习笔记

    错误.异常和文件 1. 异常处理 错误指的是代码有语法问题,无法解释运行,必须改正后才能运行 如果代码没有语法问题,可以运行,但会出运行时的错误,例如除零错误,下标越界等问题,这种在运行期间检测到的错 ...

  2. 上传文件转换html异常,JS 文件互转、10 个 HTML 文件上传技巧、Web 用户体验设计提升指南、奇怪的知识——位掩码 | 思否技术周刊...

    上传文件功能可以说是项目经常出现的需求.从在社交媒体上上传照片到在求职网站上发布简历,文件上传无处不在.在本文中,我们将讨论 HTML文件上传支持的10种用法,希望对你有用. 1. 单文件上传 我们可 ...

  3. Python中的文件操作和异常

    Python中的文件操作和异常 文章目录 Python中的文件操作和异常 一.文件 01. 文件的概念 1.1 文件的概念和作用 1.2 文件的存储方式 文本文件和二进制文件 02. 文件的基本操作 ...

  4. 我的python学习(五)文件操作、异常捕获

    读写.创建文件 文件的分类: 文本文件:基于字符编码,存储的是普通字符串,不包括字体.字号.样式.颜色等信息,可通过文本编辑器显示和编辑,例如txt文件: 二进制文件:基于值编码的,以字节形式存储,其 ...

  5. Python初级学习教程—从入门开始学习(函数、组合数据类型、文件操作、异常、模块)

    文章目录 入门 一.数据的相关操作 二.continue 和 break的区别(易混点) 三.函数 变量的作用域 三.函数进阶 1.函数多个返回值 2.函数参数种类 3.匿名函数 组合数据类型 一.列 ...

  6. python打开文件报错无效序列_黑马python入门(4):python基础(序列,异常,操作文件,模块包,日志调试信息)

    序列 str声明:test_str="abcedf" 也可以保留字符串里面的格式来 test_str=""" \r\n测试标题 hello world ...

  7. Python的文件操作以及异常

    1.文件操作介绍 <1>什么是文件 使用文件的目的: 就是把一些数据存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力 2.文件的打开与关闭 <1>打开 ...

  8. python学习笔记(九)——文件和异常(重点)

    学文件的目的:数据不能可能一直在内存中存储,持久化存储到磁盘就需要用到文件了! 一.文件和上下文管理器(重点) 1.打开文件-open() 方法 Python open() 方法用于打开一个文件,并返 ...

  9. python异常的处理机制_python异常和文件处理机制详解

    本文实例讲述了python异常和文件处理机制.分享给大家供大家参考,具体如下: 1 异常处理 Python的异常用 try except finally 来处理. 并且except后还可以跟 else ...

最新文章

  1. 何恺明团队最新力作SimSiam:消除表征学习“崩溃解”,探寻对比表达学习成功之根源...
  2. IBM X60/X61无光驱安装XP
  3. 转载:ROS的QT界面 开发史上 最强教程
  4. word图片靠右_如何设置word图片边缘透明
  5. 【零基础学Java】—继承的概述(十九)
  6. Go实现 爬虫v0.2
  7. php mysql访问不,php不能访问mysql怎么办
  8. 对输入法的人机交互设计评价
  9. ValidatorUtil验证工具类判断手机、ip地址、邮箱,身份证等
  10. fpga c语言教程,FPGA实践教程(一)用HLS将c程序生成IPcore
  11. keil中函数变量定位方法
  12. 大学抢课到学校的计算机房,网络选课制度引发“抢课大战”
  13. Android混淆篇 ijkplayer混淆
  14. 《邪不压正》里面究竟谁是真正的隐侠,蓝青峰究竟是正是邪?
  15. 服务器显示媒体已断开,媒体断开是什么?Win10专业版如何修复媒体断开?
  16. 小招喵跑步(动态规划)
  17. 作为一个程序员,至少需要掌握哪几种编程语言?
  18. Python之面向对象
  19. momentjs 常用总结
  20. google glog使用指南

热门文章

  1. unity第一人称射击游戏,枪击游戏,功能完整可以当大作业或者毕设
  2. 心通达OA软件六大特色总结
  3. JWT 快速入门,并实现登录认证
  4. uniapp app端一键登录
  5. C语言逆序输出字符串
  6. Kolmogorov-Smirnov test in Java : K-S检验正态分布 Java实现
  7. 《Android编程兵书》PDF版电子书下载
  8. Unity手游实战:ECS设计思想和Entitas插件
  9. textbox文本键盘全选
  10. 物联网平台---第一章