Python的文件
1、Open 读
open() 函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写。
文件操作:打开、读取、写入、关闭文件(避免冲突)
文件操作场景:excel测试数据读取,配置文件的读取、接口-文件上传、日志记录-写入文件…
# 打开文件--创建file对象
f = open("py73", encoding="utf8")
print(f) # <> 是一个对象,包含各种方法
# 读取内容
print(f.read())
# 关闭文件 -- 操作完毕
f.close()
2、Open 写
2、写入内容到文件:
- mode参数,默认r读权限,无写的权限,报错io.UnsupportedOperation: not writable
- 设置mode参数值:
- w: 覆盖写入,会把之前的内容全部覆盖 。文件可以存在【直接覆盖写入】,也可以不存在【新建】
- a: 追加写入 不会覆盖掉原来原来的内容 ,安全一些:文件可以存在【直接追加写入】 也可以不存在【新建】
- x: 打开新的文件并写入内容,效果是会创建一个新的文本并写入内容 :open的文件不能存在,存在报错
# 打开文件--创建file对象
f = open("p3", encoding="utf8", mode='a')
# print(f) # <> 是一个对象,包含各种方法
# 写入内容
f.write("飞流直下三千尺")
# 换行写入
f.write("\n飞流直下三千尺!")
# 关闭文件 -- 操作完毕
f.close()
3、Open 读取二进制图片和视频
读取和写入二进制、图片、视频等
- 图片文件,不能使用encoding=“utf8” 编码
- mode需要b,表示操作二进制数据:读-rb 写-wb
-rb:以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
-wb:以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
# 打开文件--创建file对象
f = open("lemon1.png", mode='rb')
# print(f) # <> 是一个对象,包含各种方法
# 读取图片文件
filedata = f.read()
print(filedata)
# 关闭文件 -- 操作完毕
f.close()
# 图片数据-文件写入
f1 = open("lemon2.png", mode='wb')
f1.write(filedata)
f1.close()
4、按行读取:
readlines():读取文件的所有行-字符串(包含最后换行符),并将它们作为列表返回。
- 分别取到每一行的数据,遍历-for循环
- 逐行读取的数据最后有一个换行符,但是一般不需要换行符,去掉换行符 – strip()
readline():读取文件的一行,包含换行符。若想分批次读取并且每次读取1行,你可以结合readline()和循环来实现。
# 打开文件--创建file对象
f = open("py73", encoding="utf8")
# 读取内容--readlines
data = f.readlines()
print(f"readlines:{data}") # 返回 ['飞流直下三千尺飞流直下三千尺!']
new_data = [] # 空列表
for i in data:
new_i = i.strip("\n") # 飞流直下三千尺
print(new_i) # new_i是字符串
new_data.append(new_i)
print(new_data)
f.close()
# 读取内容 - readline
# data = f.readline() # '飞流直下三千尺'
# print(data, type(data))
# print(f.readline())
# print(f.readline())
# 逐行读取每一行数据 + 结合循环实现 -- 了解
while True:
data = f.readline()
if not data: # 读取到文件末尾,data返回是空字符串
break
print(data, end="") # 读取每一行包含换行符,打印不需要换行,end=''避免换行
# 关闭文件 -- 操作完毕
f.close()
5、按行写入
# 打开文件--创建file对象
f = open("py03", encoding="utf8", mode='a')
# 写入内容
# f.write("\n飞流直下三千尺")
# 逐行写入-- 一个字符串列表/元组的每一个元素
data = ['\n飞流直下三千尺', str(10000)]
f.writelines(data)
# 关闭文件 -- 操作完毕
f.close()
6、优化
"""
with的写法打开文件:可以自动关闭文件;with语句,自带close,不需要手动写。
"""
with open("py03", encoding="utf8", mode='a') as f:
f.write("\n飞流直线三千尺,意")
总结:
按行读取和按行写入:
按行读取:
readlines():读取文件的所有行,并将它们作为列表
返回。
readline():读取文件的一行,包含换行符。若想分批
次读取并且每次读取1行,你可以结合readline()和循环来
实现。
逐行写入:
writelines():用于将一个字符串列表/元组的每一个元素,
逐个写入文件。