Python3-2020-测试开发-23- 文件操作
一、文件分类
"""文本文件和二进制文件"""
# 文本文件
# 文本文件存储的是普通的“字符”文本,python默认为unicode字符集(两个字节表示一个字符),最多可以表示65536个
# 二进制文件
# 二进制文件把数据内容用“字节”进行存储,无法用记事本打开
二、文件打开方式
# 打开的方式
# r----------------读read模式
# w----------------写write模式,如果文件不存在则创建,如果文件存在,则重写新内容
# a----------------追加append模式,如果文件不存在则创建,如果文件存在则在文件末尾追加新内容
# b----------------二进制模式(可与其他模式组合使用)
# +----------------读写模式(可与其他模式组合使用)
三、文件操作
# 常用编码 # python默认的是Unicode编码UTF-8,os操作系统默认为GBK # f = open(r"xxxx","w",encoding="utf-8") # 这样即可使用utf-8打开文件 # write 和 writelines()写入数据 # writelines(l)把字符串列表写入文件中,不添加换行符 # write(s):将字符串s写入文件 # writelines(['褚01\n','褚02\n','褚03']) # 文件的读取 # read([size]):从文件读取size个字符,并作为结果返回,如果没有size参数,则读取整个文件,读取至文件尾,会返回空字符串 # readline(),读取一行作为结果返回,读取到文件末尾,会返回空字符串 # readlines(),文本文件中,每一行作为一个字符串存入列表中,返回该列表的
1. 文件内容如下:在文件末尾添加#0 #1 #2
褚01
褚02
褚03
方法:enumerate
l = ['a','b',"c"] l1 = enumerate(l) print(l1) print(list(l1)) —————————————————————————————————— <enumerate object at 0x00000232F8B74A20> [(0, 'a'), (1, 'b'), (2, 'c')]
实现方式:
import os path = os.path.split(os.path.split(os.path.realpath(__file__))[0])[0] # ('C:\\chushujin\\study\\mypythonscript\\src\\com.csjin.qa2020\\TestException', 'Test02.py') print(path) path_txt = os.path.join(path,"test.txt") """ 将文件中的每行末尾加一个 #index 褚01 #0 褚02 #1 褚03 #2 """ with open(path_txt,"r",encoding="utf-8") as f: lines = f.readlines() 使用推导式数列 lines = [line.rstrip() + "#"+ str(index)+"\n" for index,line in enumerate(lines)] print(lines) with open(path_txt,"w",encoding='utf-8') as f: f.writelines(lines)
输出:
褚01#0 褚02#1 褚03#2
2. 二进制方式的读取与写入
"""二进制方式读取和写入""" with open("1.jpg","rb") as f: with open("1.copy.jpg","wb") as w: for line in f.readlines(): w.write(line)
四、seek()方法
# seek(offset[,whence])
# 把文件指针移动到新的位置,offset表示相对于whence的位置;
# whence不同的值代表不同的含义:
# 0-----表示从头开始计算
# 1-----从当前位置开始计算
# 2-----从文件尾开始计算
# tell()返回文件指针的当前位置
test.txt
我爱你我爱你
哈哈哈哈哈
哦哦哦哦哦哦
代码:
with open("test.txt","r",encoding="utf-8") as f: print("文件名为:{0}".format(f.name)) print("指针位置为:{0}".format(f.tell())) print("读取的内容为:{0}".format(f.readlines())) print(f.tell()) f.seek(0,0) print("读取的内容为:{0}".format(f.readlines()))
输出:
文件名为:test.txt 指针位置为:0 读取的内容为:['我爱你我爱你\n', '哈哈哈哈哈\n', '哦哦哦哦哦哦\n'] 57 读取的内容为:['我爱你我爱你\n', '哈哈哈哈哈\n', '哦哦哦哦哦哦\n']
五、pickle序列化
import pickle a1 = "褚01" a2 = 18 a3 = [11,22,33] with open("data.dat","wb") as f: pickle.dump(a1,f) pickle.dump(a2,f) pickle.dump(a3,f) with open("data.dat","rb") as f: l1 = pickle.load(f) l2 = pickle.load(f) l3 = pickle.load(f) print(l1);print(l2);print(l3)
输出:
褚01 18 [11, 22, 33]
当有些人一出生就有的东西,我们要为之奋斗几十年才拥有。但有一样东西,你一辈子都不会有,那就是我们曾经一无所有。