python文件操作和异常之文件的操作
从文件中读取数据:
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文件操作和异常之文件的操作相关推荐
- 【python】错误、异常和文件---复习笔记
错误.异常和文件 1. 异常处理 错误指的是代码有语法问题,无法解释运行,必须改正后才能运行 如果代码没有语法问题,可以运行,但会出运行时的错误,例如除零错误,下标越界等问题,这种在运行期间检测到的错 ...
- 上传文件转换html异常,JS 文件互转、10 个 HTML 文件上传技巧、Web 用户体验设计提升指南、奇怪的知识——位掩码 | 思否技术周刊...
上传文件功能可以说是项目经常出现的需求.从在社交媒体上上传照片到在求职网站上发布简历,文件上传无处不在.在本文中,我们将讨论 HTML文件上传支持的10种用法,希望对你有用. 1. 单文件上传 我们可 ...
- Python中的文件操作和异常
Python中的文件操作和异常 文章目录 Python中的文件操作和异常 一.文件 01. 文件的概念 1.1 文件的概念和作用 1.2 文件的存储方式 文本文件和二进制文件 02. 文件的基本操作 ...
- 我的python学习(五)文件操作、异常捕获
读写.创建文件 文件的分类: 文本文件:基于字符编码,存储的是普通字符串,不包括字体.字号.样式.颜色等信息,可通过文本编辑器显示和编辑,例如txt文件: 二进制文件:基于值编码的,以字节形式存储,其 ...
- Python初级学习教程—从入门开始学习(函数、组合数据类型、文件操作、异常、模块)
文章目录 入门 一.数据的相关操作 二.continue 和 break的区别(易混点) 三.函数 变量的作用域 三.函数进阶 1.函数多个返回值 2.函数参数种类 3.匿名函数 组合数据类型 一.列 ...
- python打开文件报错无效序列_黑马python入门(4):python基础(序列,异常,操作文件,模块包,日志调试信息)
序列 str声明:test_str="abcedf" 也可以保留字符串里面的格式来 test_str=""" \r\n测试标题 hello world ...
- Python的文件操作以及异常
1.文件操作介绍 <1>什么是文件 使用文件的目的: 就是把一些数据存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力 2.文件的打开与关闭 <1>打开 ...
- python学习笔记(九)——文件和异常(重点)
学文件的目的:数据不能可能一直在内存中存储,持久化存储到磁盘就需要用到文件了! 一.文件和上下文管理器(重点) 1.打开文件-open() 方法 Python open() 方法用于打开一个文件,并返 ...
- python异常的处理机制_python异常和文件处理机制详解
本文实例讲述了python异常和文件处理机制.分享给大家供大家参考,具体如下: 1 异常处理 Python的异常用 try except finally 来处理. 并且except后还可以跟 else ...
最新文章
- 何恺明团队最新力作SimSiam:消除表征学习“崩溃解”,探寻对比表达学习成功之根源...
- IBM X60/X61无光驱安装XP
- 转载:ROS的QT界面 开发史上 最强教程
- word图片靠右_如何设置word图片边缘透明
- 【零基础学Java】—继承的概述(十九)
- Go实现 爬虫v0.2
- php mysql访问不,php不能访问mysql怎么办
- 对输入法的人机交互设计评价
- ValidatorUtil验证工具类判断手机、ip地址、邮箱,身份证等
- fpga c语言教程,FPGA实践教程(一)用HLS将c程序生成IPcore
- keil中函数变量定位方法
- 大学抢课到学校的计算机房,网络选课制度引发“抢课大战”
- Android混淆篇 ijkplayer混淆
- 《邪不压正》里面究竟谁是真正的隐侠,蓝青峰究竟是正是邪?
- 服务器显示媒体已断开,媒体断开是什么?Win10专业版如何修复媒体断开?
- 小招喵跑步(动态规划)
- 作为一个程序员,至少需要掌握哪几种编程语言?
- Python之面向对象
- momentjs 常用总结
- google glog使用指南