「第五章」 Python3 文件操作
5.1 文件操作流程
对文件的操作流程:
1. 打开文件
2. 通过文件句柄操作文件(读、写..)
3. 关闭文件
5.2 文件操作相关方法
(1)read()
file 内容:
春晓
春眠不觉晓,
处处闻啼鸟。
夜来风雨声,
花落知多少。
#例子一
f = open("file.txt","r",encoding="utf-8")
date = f.read()
print(date )
f.close()
#例子二
f = open("file.txt","r",encoding="utf-8")
date = f.read(5) # 表示读5个字符,一个英文和一个中文都是一个字符
print(date )
f.close()
运行结果:
春晓
春眠不觉晓,
处处闻啼鸟。
夜来风雨声,
花落知多少。
春晓
春眠
(2)open()方法
open("file.txt","r",encoding="utf-8")
w: 表示写操作(写的时候会清空之前的内容)
a:表示文件内容追加(在之前的内容基础上最佳新的内容)
r+: 表示读写模式
w+: 表示写读模式
a+: 追加读模式
(3)readline()-按行读取文件的内容
readline() 按行读取文件的内容,第一次readline()之后,光标会随着移动,再接着readline(),读取的内容会跟第一次读的不一样。
例子:
f = open("file.txt","r",encoding="utf-8")
print(f.readline())
print(f.readline()) # 读完第一行的时候,光标已经移动到第二行,所以读的时候从第二行开始读
f.close()
运行结果:
春晓
春眠不觉晓,
(4)readlines()-多行读取文件的内容
readlines() : 多行读取文件的内容,readlines()不带参数,默认是读取文件所有内容,得到的内容是一个列表,列表的元素是每一行的内容,每一行是一个单独的字符串。
例子:
f = open("file.txt","r",encoding="utf-8")
print(f.readlines())
f.close()
运行结果:
['春晓\\n', '春眠不觉晓,\\n', '处处闻啼鸟。\\n', '夜来风雨声,\\n', '花落知多少。\\n']
(5)readlines()-遍历读取的内容
例子一:
f = open("file.txt","r",encoding="utf-8")
a =f.readlines()
for i in a:
print(i)
f.close()
运行结果:
春晓
春眠不觉晓,
处处闻啼鸟。
夜来风雨声,
花落知多少。
例子二:
f = open("file.txt","r",encoding="utf-8")
a =f.readlines()
for i in a:
print(i.strip()) # print()打印多行时,本身就默认换行
f.close()
运行结果:
春晓
春眠不觉晓,
处处闻啼鸟。
夜来风雨声,
花落知多少。
(6)readlines()-修改某行内容
程序需求:
春晓
春眠不觉晓,
处处闻啼鸟。
夜来风雨声,I LOVE
花落知多少。
把第四行加个I LOVE 打印出来
程序实现:
#方法一
f = open("file.txt","r",encoding="utf-8")
a =f.readlines()
j =0
for i in a:
j+=1
if j == 3:
print(i.strip()+"I LOVE")
else:
print(i.strip())
f.close()
#优化方案一
print("--------------")
f = open("file.txt","r",encoding="utf-8")
j =0
for i in a:
j+=1
if j == 3:
i = i.strip()+"I LOVE"
print(i.strip())
f.close()
#优化方案二
print("--------------")
f = open("file.txt","r",encoding="utf-8")
a =f.readlines()
j =0
for i in a:
j+=1
if j == 3:
i = "".join([i.strip(),"I LOVE"])
print(i.strip())
f.close()
#优化方案三
print("--------------")
j =0
for i in f: #读文件的时候,为了防止文件过大,防止内存存不下(消耗),for循环内部将 f 做成一个迭代器,用一行取一行
j+=1
if j == 3:
i = "".join([i.strip(),"I LOVE"])
print(i.strip())
f.close()
运行结果:
春晓
春眠不觉晓,
处处闻啼鸟。I LOVE
夜来风雨声,
花落知多少。
(7)tell()-读取光标的位置
tell():读取光标的位置,一个英文字符占一个光标位,一个中文占3个光标位。
例子:
"""file.txt
春眠不觉晓,
处处闻啼鸟。
夜来风雨声,
花落知多少。
"""
f = open("file.txt","r",encoding="utf-8")
print(f.tell())
print(f.read(3))
print(f.tell())
f.close()
运行结果:
0
春眠不
9
---------------
0
hel
3
(8)seek()-调整光标的位置
seek(0)-调整光标的位置,0表示从第一个位置开始。
例子:
f = open("file2.txt","r",encoding="utf-8")
print(f.tell())
print(f.read(3))
print(f.seek(0))
print(f.read(5))
print(f.tell())
f.close()
运行结果:
0
hel
0
hello
5
flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
#例子:进度条
import sys,time
for i in range(50):
sys.stdout.write("*")
sys.stdout.flush()
time.sleep(0.2)
运行结果:
**************************************************
(10)truncate()-截取文件内容
truncate() 清空文件内容,参数不加,默认是从光标最开始的0开始到结束
例子:
"""file:
hello world
"""
#例子一
# f = open("file.txt","w",encoding="utf8")
# f.truncate()
# print("---------")
#例子二
f = open("file.txt","a",encoding="utf8")
f.truncate(3) #表示起点从光标位置3开始截取到最后,如果open的参数是w,截取的时候,先清空文件,光标会指向3的位置,如果如果open的参数是a,会把3之后的内容截取了,光标指向3的位置。
运行结果:
hel
isatty()-判断文件对象是否是一个终端,运行返回布尔值,True 表示 是,False 表示不是
#例子:
f = open("file2.txt","r",encoding="utf-8")
print(f.isatty())
f.close()
运行结果:
False
(12)打开文件r+模式
r+: 表示读写模式,读取原来文件内容,在原来内容的结尾上写入新的内容
例子:
"""file:
春眠不觉晓,
处处闻啼鸟。
夜来风雨声,
花落知多少。
"""
#例子一
f = open("file.txt","r+",encoding="utf8")
print(f.readline())
print(f.write("作者:孟浩然"))
运行结果:
春眠不觉晓,
春眠不觉晓,
处处闻啼鸟。
夜来风雨声,
(13)打开文件W+模式
打开文件w+模式 : 写文件之前,先清空文件,再写文件内容,再读取文件内容
例子:
"""file:
春眠不觉晓,
处处闻啼鸟。
夜来风雨声,
花落知多少。
"""
#例子一
f = open("file.txt","w+",encoding="utf8")
print(f.write("作者:孟浩然")) #写完文件之后,光标跑到最后,再读操作,读不到数据
print(f.read()) #读是读光标之后的内容
f.close()
#例子二
f = open("file.txt","w+",encoding="utf8")
print(f.write("作者:孟浩然"))
f.seek(0)
print(f.read())
f.close()
运行结果:
6
6
(13)打开文件a+模式
打开文件a+模式: 光标是从文件内容的最后一个字符之后开始
(14)with-打开文件,退出with块时,自动关闭文件
with-打开文件,退出with块时,自动关闭文件
例子:
"""file:
春眠不觉晓,
处处闻啼鸟。
夜来风雨声,
花落知多少。
"""
#方式一
f = open("file.txt","r",encoding="utf-8")
print(f.read())
f.close()
print("-----")
#方式二
with open("file.txt","r",encoding="utf-8") as f: #with-打开文件,退出with块时,自动关闭文件。
print(f.read())
print("-----")
#方式三
with open("file.txt","r",encoding="utf-8") as f_read,open("file1.txt","w",encoding="utf-8") as f_write: #同时读2个文件,可以用这种方法
j =0
for i in f_read:
j+=1
if j == 3:
i = "".join([i.strip(),"作者:孟浩然\\n"])
f_write.write(i)
运行结果:
春眠不觉晓,
处处闻啼鸟。
夜来风雨声,
花落知多少。
-----
春眠不觉晓,
处处闻啼鸟。
夜来风雨声,
花落知多少。
-----