创建文件
myfile = open('hello.txt', 'w', encoding='utf8') # 赋值给一个句柄myfile
# 创建一个叫hello.txt的文件 并且往里面写内容
myfile.write('旧人小表弟\n') # 写内容
myfile.write('Hell wold!\n') # 写内容
myfile.close() # 把文件关掉 释放内存
编码不指定默认ansi,参考之前的文章
打开文件
f1 = open('hello.txt', encoding='utf8') # 打开/读取文件 读取文件时候的mode=r 可以不写
print(f1.read()) # 读取全部内容 一次性读取文件里的所有内容
# print(f1.read()) # 再读就没有了,类似迭代器
f2 = open('hello.txt', encoding='utf8') # 重新打开文件
print(f2.readline()) # 读取一行
print(f2.readline()) # 读取一行
# print(f2.readline()) # 文件一共就两行,再读就没有了,类似迭代器
l = open('hello.txt', encoding='utf8').readlines() # 打开的同时读取全部内容放到一个列表l里
print(l) # l是个列表 而不是文件句柄 可以使用列表的一些方法
for line in l:
print(line, end='') # for循环 遍历读取到文件内容的列表
with
# with 上下文方式 跳出代码块后会自动会释放 相当于自带close 一般做数据操作就用with
with open('hello.txt', encoding='utf8') as ll: # 打开一个文件临时交给给变量ll
for line in ll.readlines(): # for循环遍历readlines()取到的所有的文件内容
print(line)
readlines()是把文件中每一行存到列表中
二进制文件
file = open('data.bin', 'rb').read() # 打开一个二进制文件 读取所有内容并赋值给一个句柄file
序列化 反序列化
# 把Python对象写入到普通文件里
x, y, z = 1, 2, 3
l = [1, 2, 3]
f1 = open('data.txt', 'w') # 创建一个data.txt文件 并且往里面写入内容
f1.write('{},{},{}\n'.format(x, y, z)) # 写入x,y,z
f1.write(str(l)) # 把列表转换成字符串写入文件里
f1.close() # 关闭文件释放内存
chars = open('data.txt').read()
print('这个时候打印出来的仅仅是字符串', chars)
使用pickle模块实现简单的对象序列化
import pickle # pickle模块
# 文件打开读取后默认是字符串
# 实际开发的时候读取这种对象用序列化方式 可以还原保留数据结构和状态 存的时候是什么类型 取出来还是什么类型
d = {'a': 1, 'b': 2}
f2 = open('data.ppp', 'wb') # 创建二进制文件 后缀是什么都可以
pickle.dump(d, f2) # 使用pickle模块下的方法 把d这个字典表放到f2这个二进制文件里
f2.close() # 关闭文件
print(open('data.ppp', 'rb').read()) # 这样打开的是没有任何实际意义的二进制文件
f3 = open('data.ppp', 'rb')
data = pickle.load(f3) # 转换成原来的对象值(还原成字典表)
print(data) # 打印字典表
print(data.get('b')) # get字典表里的一个键
拓展: