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]

 



posted @ 2020-06-23 18:51  旅行没有终点  阅读(161)  评论(0编辑  收藏  举报