在目前的环境中,读取文件应该算是最基本的操作了,python
也内置了读写文件的函数,让我们来看下。这里有个小点要点一下,我们使用python
是没法办直接操作文件的,而是操作系统给我们预留了接口,python
通过操作系统接口才能去读写文件。
还是提及一点,编写这篇文章的
python
版本为:
最简单读取文件操作
在python
中,直接使用open
方法就可以打开文件对象了。
open
函数需要传入的参数为open(文件名,模式,编码)
,其中文件名必须要指定文件名。
例如,我们想打开files.txt
文件,可以这么写:
f = open("files.txt")
这样的话,我们就得到了一个文件句柄f
。而直接调用f.read()
即可读取所有信息,例如:
我们有个文件,内容如下:
我们可以使用如下代码进行读取:
f = open("files.txt")
print(f.read())
结果如下:
操作一次文件读写完整流程
上述代码简单吧,但是也是有缺陷的,在于操作完毕后,没有关闭文件句柄,此操作可能会引起数据丢失,因为我们的数据不是直接存到磁盘的,而是写到缓冲器,等量够了之后,再进行写入磁盘操作。
但是等我们在执行close
操作时,会强制将缓冲器的内容写到磁盘中去。
所以完整的读写流程为:
- 使用
open
打开文件 - 进行读写操作
- 完毕后需要
close
文件
基本代码为:
f = open("files.txt")
# 文件读写操作
f.close()
还会有这样的一种情况,就是文件读写过程中出现异常了,抛错,导致文件执行不到f.close()
,此时就没办法做关闭句柄的动作。
这个时候,我们就可以使用with open() as f
的方式来进行打开文件操作,with
语句会在底层做关闭句柄操作,即使触发异常,也会正常关闭句柄。
文件打开方式
还记得第一段落所提及的open
打开的模式么? 其实指的是文件的打开方式,默认是只读模式,即: r
,除此之外,还有其他的方式,例如:
r
: 文件以只读方式打开(也是默认模式)。w
: 文件以写入方式打开,会重置文件。x
: 创建一个新文件且写入。a
: 追加写入(如果文件存在,会在末尾进行追加)。b
: 文件以二进制打开。t
: 文件以文本模式打开(也是默认模式)。+
: 打开文件进行更新(可读可写)。
上述模式是可以叠加的,例如默认的: rt
。
如果模式不正确,则会抛错,例如,我们使用默认的rt
打开一个已有文件,进行write
写入:
f = open("files.txt","rt")
print(f.readline())
f.write("123")
执行后发现,其实f.readline
已经执行成功了,而f.write
失败了,报错为没有writeable
。
此时我们若将权限修改为r+
,则就不会报错,我们试试看
程序修改为:
执行后查看文件
可以看到123
已经追加到文件中了,只不过没有换行。
python提供的读取方法有何意义
在上述段落中,我们已经有了文件句柄f
,关于读取有如下几种方法:
readlines
: 一次性读取所有行,然后将其按照列表的形式返回。readline
: 每次读取一行,直至空。read
: 读取全部数据并且返回。
readlines
会读取所有的行,并且按照列表的形式返回,例如:
f = open("files.txt","r")
print(f.readlines())
f.close()
上述代码会将files.txt
全部读取完,并且按照换行作为分隔符,进行拆分数据,并且按照列表的形式进行返回。
执行后效果为:
而read
则会读取全部数据并且返回,当然了,read
还能接收参数,例如read(10)
就是读取10个字节数据,默认是全部,例如:
f = open("files.txt","r")
print(f.read())
f.close()
执行后效果为:
对于readline
来说,它会读取一行文件,我们可以结合with
语句来操作,可以避免close
。如何使用open...with
配合readline
读取所有的行呢? 可以使用如下代码实现:
with open("files.txt","r+") as f:
while True:
line = f.readline()
if not line:
break
print(line)
上述代码中,我们使用了while True
来进行死循环,将文件读取完毕后,就退出循环。
小案例: 扫描redis
配置文件
我们将使用python
读取文件操作,对redis.conf
进行读取,将排查掉配置文件的空行和注释行,并且将剔除配置文件之后的配置写入到新文件中newRedis.conf
。
注意: redis
使用#
进行注释配置,例如:
cat redis.conf
# 这是注释
bind 0.0.0.0 # 这也是注释
由于该配置文件实在是太长了,所以,我们随机选择一段进行操作:
我们可以先使用写方式打开新文件newRedis.conf
,而后使用以只读方式打开redis.conf
,而后逐行扫描,如果遇到空行,或者开头为#
的就直接略过,如果上述2者都不是,则是配置文件,注意配置文件是否包含注释符号#
,如果包含的话,需要略过#
之后的数据。
上述代码引入了re
库进行处理,其中match
代表匹配字符串行首,^$
代表空行,而后再在配置文件中判断#
是否出现在语句中,如果出现,再使用元组将第一个#
配置前的数据抓出来。
最后将抓出的配置写入文件中即可。
执行脚本后,查看newRedis.conf
文件
总结
本篇文章介绍了python
读写文件,更推荐使用with open
的方式,因为它底层会调用close
方法,而不需要我们自己去写调用close
方法。
最后我们写了一个小案例来屏蔽redis
注释和空行,仅读取配置文件。
如果你对Python感兴趣,想要学习python,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓
Python全套学习资料
1️⃣零基础入门
① 学习路线
对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
② 路线对应学习视频
还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
③练习题
每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
2️⃣国内外Python书籍、文档
① 文档和书籍资料
3️⃣Python工具包+项目源码合集
①Python工具包
学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
②Python实战案例
光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
③Python小游戏源码
如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
4️⃣Python面试题
我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
5️⃣Python兼职渠道
而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
上述所有资料 ⚡️ ,朋友们如果有需要的,可以扫描下方👇👇👇二维码免费领取🆓