注意:如果这里填写的编码类型和文件本身的编码格式不一致的话,就会报错。【python系统学习17】python中的文件读写-LMLPHP

上图用“utf-8”编码模式打开,但是文本的编码实际是“ANSI”。就报了这种错误。

读取

read()函数将整个文件一次性读取出来

readResult = openResult.read() # 文件读取后的字符串内容赋值给readResult变量
print(readResult) # 可以打印出读取的内容

read() 会从txt文件取出全部内容,是一个字符串。

readlines()函数逐行读取文件的内容

readResult = openResult.readlines() # 逐行读取
print(readResult)

readlines() 会从txt文件取得一个列表,列表中的每个字符串就是读取的文件中的每一行。而且每个字符串后面还有换行的\n符号。

如有txt文件,内容如下:

小石头 100 93 83
郭菊锋 89 67 9
xing.org1^ 23 48 100

则用上边的代码readlines()读取后,打印readResult的结果就是长这样的:

['小石头 100 93 83\n', '郭菊锋 89 67 9\n', 'xing.org1^ 23 48 100']

这样就可以用for循环遍历列表,逐行处理数据。(具体做法可以看最后边的小练习)

关闭文件

使用的是close()函数

openResult.close() # 直接关闭即可

文件关闭的必要性:

1.计算机能够打开的文件数量是有限制的,open()过多而不close()的话,就不能再打开文件了。

2.能保证写入的内容已经在文件里被保存好了。

文件关闭之后就不能再对这个文件进行读写了。如果还需要读写这个文件的话,就要再次 open() 打开这个文件。

读取文件总结三步

openResult = open('/Users/.../demo.txt','r',encoding='utf-8'# 1、打开
readResult = openResult.read() # 2、读取
print(readResult) # 2+1、可以对读取的文件进行使用操作
openResult.close() # 3、关闭

文件写入

问,把大象放到冰箱需要几步?答:打开冰箱 - 放入大象 - 关上冰箱

再问,文件写入需要几步?答:打开文件 - 写入信息 - 关闭文件

打开文件

同样还是使用open()函数打开文件

但第二个参数,打开的模式要改变一下:

openResult = open('/Users/.../demo.txt','w',encoding='utf-8')
# openResult变量用于存放open打开的文件的数据,以便对其进行后续操作。

或者另一种写法:

openResult = open('/Users/.../demo.txt','a',encoding='utf-8')

open各参数说明(其他参数见上边表格,这里重点说第二个参数):

在'w'和'a'模式下,如果你打开的文件不存在,那么open()函数会自动帮你创建一个,不会报错。

写入

使用write()函数往文件中写入一个内容

openResult.write('小石头\n'# 向openResult中写入内容。write参数必须是字符串,表示要写入的内容
openResult.write('xing.org1^\n'# \n表示换行符。
print(openResult)

注意,写入时,write函数内容不要尝试用数字,不然你会体会到报错的报复:【python系统学习17】python中的文件读写-LMLPHP

那我们就想写入一个序列(列表)的话,该怎么做呢?

使用writelines()函数向文本中写入序列内容

listVal = ['小石头\n''xing.org1^\n'# 一个待写入的列表。要换行还要自己加入换行符
openResult.writelines(listVal) # writelines参数接受一个序列

关闭文件

关闭文件,依旧使用close()函数

openResult.close() # 直接关闭即可

总结三步

重写文件内容:

# 用write模式打开文件
openResult = open('/Users/.../demo.txt','w',encoding='utf-8'# 1、打开(write)
openResult.write('小石头\n'# 2、覆盖源文件内容、写入
openResult.write('xing.org1^\n')
openResult.close() # 3、关闭

或者,追加内容:

# 用append模式打开文件
openResult = open('/Users/.../demo.txt','a',encoding='utf-8'# 1、打开(append)
openResult.write('小石头\n'# 2、向源文件内容之后追加、写入
openResult.write('xing.org1^\n')
openResult.close() # 3、关闭

此时可以观察,txt文件里的内容已经被修改了

open函数

打开文件的几种模式

参照上边的代码,open函数调用时,第二个参数就需要传入是r还是w亦或者是其他模式,表示只读还是只写还是其他等等。

为什么打开的时候就要决定是读还是写的模式,之后决定不行吗?

这是因为,计算机非常注意数据的保密性,在打开时就要决定以什么模式打开文件。

而除了'r',还有'w'(写入),'a'(追加)等模式,详见下表:

二进制资源读写

w和a写入的都是文本内容。

如果想写入图片、视频、音频等这些以二进制形式进行存储的资源内容时,需要使用‘wb’这些以二进制的方式打开并读写文本的模式。

with关键字

使用with配合open函数来读取文件,可以不用写close()来关闭文件。这样可以防止我们代码最后忘记关闭文件或频繁关闭文件,造成资源占用或代码冗余的情况。

格式

with open() as xxx:

语法

with open('文件地址','读写模式'as 变量名: #格式:注意冒号
    变量名.write('写入内容'#冒号下对文件的操作要缩进

#最后无需用close()关闭

写法

with open('./demo.txt','a'as openResult:
    openResult.write('小石头')

python克隆图片

原理,用python读取一个图片文件,然后再写入一个新的图片文件。实现图片的拷贝克隆功能。

with open('photo1.png''rb'as photo1: # 打开原图photo1.png,rb只读二进制资源模式
    result = photo1.read() # 将读取结果赋值给result
    with open('photo2.jpg''wb'as photo2: # 打开新图photo2.jpg,wb只写模式,没有该文件将创建一个新文件。
        photo2.write(result) # 创建的新文件中,写入photo1的数据,实现图片克隆。

小练习

文件读写操作小练习:

本地一个demo.txt文件,文件内容如下:

<!-- 原来的,demo.txt文件内容 -->
小石头 100 93 83
郭菊锋 89 67 9
xing.org1^ 23 48 100

分别是三个人的语文、数学、英语成绩。

练习目标是读取文件后计算三人的总成绩。然后写到demo文件下,生成格式如:

<!-- 修改后,demo.txt文件内容 -->
小石头 100 93 83
郭菊锋 89 67 9
xing.org1^ 23 48 100

总分:
小石头 276
郭菊锋 165
xing.org1^ 171

练习参考答案及源代码

- END -
08-23 23:33