前言
作者编写的python接口自动化测试框架回顾,基础篇已接近尾声,对于python编程基础应该是了然于胸,如果再加以练习,就可以百度自学解决一些基础问题了。作为基础篇,把文件的IO操作和异常处理放在最后学习是有理由的,这也是实际工作中遇到最频繁的两个问题点了,话不多说且来看python是如何操作文件的。
文件操作
文件,在Python中,更多脚本中提现,大多是txt文本格式的文件,少有的是关于图片(jpg\png\gif)、音频(MP3)等文件,它们都使用同一个方法:open()
open()方法
open()方法见名知意(见标识符定义规则),用于打开一个文件,并且返回文件对象,如果文件无法被打开就会抛出OSError错误,同时有open()必然有close()方法。
- 语法格式,主要是3个参数:必传文件,默认读模式,编码格式
open(file,mode="r",encoding="utf-8")
-
- 完整的语法(IDE工具输入open会提示):
open(file, mode, buffering, encoding, errors, newline, closefd, opener)
- 完整的语法(IDE工具输入open会提示):
open打开文件一般操作模式为读r、写w、a追加;但是有一个b是表示二进制文件的操作,像图片、音频的读写就需要带上b,如:rb、wb;文件操作的几种模式,多练习几次就理解了
close()方法
close是文件对象的方法,即关闭open返回的文件对象
file = open(file,mode="r")
# file对象操作
file.close() # 一定要关闭
read(int:size)
带参数,表示读的字节数,否则为读取全部
# 假设file.txt文件有10行内容,每一行依顺序为数字:1,2,3...10
"""
12345678910
2345678910
345678910
45678910
5678910
678910
78910
8910
910
10
"""
file = open("file.txt","r")
content = file.read(3)
print(content) # 应该输出:123
content = file.read(11)
print(content) # 应该输出:12345678910
content = file.read(12)
print(content) # 应该输出:???
content = file.read()
print(content) # 应该输出file.txt文件的所有内容
file.close()
- 思考一下上面的例子,从控制台看结果,file.read(12)应该输出什么?
readline(int:size)
读字节数效果同read(),但是不为空则读取整行数据包括\n换行符
file = open("file.txt","r")
content1 = file.readline()
print(content1) # 应该输出:12345678910
file.close()
readlines(int:size)
参数为空,读取所有行并以列表的形式返回,如果有数值,则返回的列表是以字符长度区分,如果字符数超过第一行小于第二行的总和则返回两行的数据,不足一行则返回一行
file = open("file.txt","r")
content1 = file.readlines()
print(content1)
# 应该输出:\ ['12345678910\n', '2345678910\n', '345678910\n', '45678910\n', '5678910\n', '678910\n', '78910\n', '8910\n', '910\n', '10']
content2 = file.readlines(10)
print(content2) # 应该输出:['12345678910\n']
content2 = file.readlines(16)
print(content2) # 应该输出:['12345678910\n', '2345678910\n']
file.close()
write()写入
读出的是字符串类型,那么写入的也必须是字符串;如果需要换行则需要自己加入\n换行符;它返回的是写入的字符长度;如果文件不存在则会创建的
file = open("file.txt","w")
content1 = file.write("写入")
print(content1) # 输出:2
file.write("写入"+"\n") # 写入文件,光标会在下一行
file.close()
writelines()
写入的数据类型是序列字符串列表,如果需要换行也需要自己加入\n换行符,没有返回值
file = open("file.txt","w")
content1 = file.writelines("写入")
print(content1) # 输出:None
file.write(["写入"+"\n"]) # 写入文件,光标会在下一行
file.close()
思考:open方法能打开xlsx文件吗?其他格式呢?
扩展
是不是觉得上面的操作有点繁琐,显示打开文件,接收文件对象,操作完文件之后,还需要关闭文件;那么接下来学一个好东西:
with…as 上下文管理器
不需要管理,程序运行结束自动关闭文件
with open("file.txt","r") as pf:
content = pf.read()
print(content) # 应该输出文件的所有内容
练习:图片文件读取,当然不需要去看内容,因为会看不懂
它没有encoding参数
with open("test.png","rb") as pf:
text=pf.read()
print(text) # 输出的是二进制:b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x02\x00\x00\x01\x00\x01\x00\x
- 复制图片
with open("iamge.jpg","rb") as pf:
content=pf.read()
with open("image.jpg","wb") as fp:
fp.write(content)