文件的读写模式
- r : 读取文件,若文件不存在则会报错
- w: 写入文件,若文件不存在则会先创建再写入,会覆盖原文件
- a : 写入文件,若文件不存在则会先创建再写入,但不会覆盖原文件,而是追加在文件末尾
- rb,wb:分别与r,w类似,但是用于读写二进制文件
- r+ : 可读、可写,文件不存在也会报错,写操作时会覆盖
- w+ : 可读,可写,文件不存在先创建,会覆盖
- a+ : 可读、可写,文件不存在先创建,不会覆盖,追加在末尾
.txt
数据为字符串格式
# 写入
with open(filename, "w", encoding='utf-8') as f:
f.write("打瞌睡")
# 读取
with open(filename, 'r', encoding='utf-8') as f:
data1 = f.read() # 读取文本的全部内容,以字符串形式返回
print('data1:', data1)
with open(filename, 'r', encoding='utf-8') as f:
data2 = f.readline() # 读取文本的第一行内容,以字符串形式返回
print('data2:', data2)
with open(filename, 'r', encoding='utf-8') as f:
data3 = f.readlines() # 读取文本所有内容,以列表形式返回
print('data3:', data3)
for line in data3:
line = line.strip('\n')
print(line)
"""
data1: da
ke
shui
打瞌睡
data2: da
data3: ['da\n', 'ke\n', 'shui\n', '打瞌睡']
da
ke
shui
打瞌睡
"""
.csv
数据为字符串格式
import pandas as pd
import csv
# 写入,newline=''解决空行问题
with open(filename, "w", encoding='utf-8', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["姓名", "班级", "学号"])
# 读取,第一行为抬头信息,不作为数据读取
df = pd.read_csv(filename, header=0, encoding='utf-8', engine='python')
for i in range(len(df)):
name = df["姓名"][i]
grade = df["班级"][i]
id = df["学号"][i]
.np
数据为ndarray格式,可保留内部数据格式
文件不能追加写入,只能覆盖写入
npy为二进制文件,npz为压缩文件
import numpy as np
# 写入
np.save(filename, np.array([[1, 2, 3], [4, 5, 6]])) # 将数组以.npy形式存储在二进制文件中
np.savez(filename, np.array([1, 2]), np.array([3, 4])) # 以.npz格式将多个数组保存到单个文件中
np.savez(filename, array1=array1, array2=array2) # 要保存的数据格式较复杂时需要指定好key,否则保存的数据为nan
# 读取
data = np.load(filename, encoding="latin1", allow_pickle=True) # 读取npz文件时格式类似字典
txt_data = np.loadtxt(filename, delimiter=',', unpack=True)
"""
delimiter分隔符
unpack用多个变量接受数据
"""
.json
数据为json格式,可保留内部数据格式
import json
# 写入
with open(filename, "w", encoding='utf-8') as f:
f.write(json.dumps({'id': [1, 2]}, ensure_ascii=False))
# 读取
with open(filename, 'r', encoding='utf-8') as f:
data = json.loads(f)
注:
dump()
和dumps()
对python对象进行序列化,将python对象进行json格式的编码。load()
和loads()
为反序列化方法,将json格式数据解码为python对象。dumps()
和loads()函数不需要传文件描述符,其他参数和dump()
、load()
函数一样。- 文件描述符 fp,json模块总是生成str对象,而不是字节对象,因此
fp.write()
必须支持str输入。