「手把手教python3接口自动化」「第五章」:文件操作

「第五章」 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")

r: 表示读操作

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")

a =f.readlines()

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("--------------")

f = open("file.txt","r",encoding="utf-8")

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

(9)flush()-刷新缓冲区

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

(11)isatty()-判断文件对象是否是一个终端

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)

运行结果:

春眠不觉晓,

处处闻啼鸟。

夜来风雨声,

花落知多少。

-----

春眠不觉晓,

处处闻啼鸟。

夜来风雨声,

花落知多少。

-----