python读取和写入各种格式的文件
dataframe格式数据
1.读取数据:
data = pd.read_csv('D:/jupyter/data/mydata/vertex.csv', header = None)
按行读取:
import csv
with open('../file.csv', 'r') as excelfile:
reader = csv.reader(excelfile)
for row in reader:
print(row)
2.在某个位置插入一列,并指定列名
scibert_df.insert(0,'id',node['true_idx'])
3.将某个list添加到df的最后一列
scibert_df['label'] = label.tolist()
4.将两个list转成df
df = {"p_id": src, "refer_id": dst}
df = pd.core.frame.DataFrame(df)
df
5.按某列分组之后转成字典
data=df[['p_id','refer_id']].values.tolist()
from collections import defaultdict
ss=defaultdict(list)#defaultdict(list, {})
for i,j in data:
ss[i].append(j)
ss
转换前:
转换后:
6.按某列的值进行排列
df.sort_values(by='score',ascending=True)
time_df.sort_values(by=['year','p_id_x'],ascending=True) # 按多个值
7.改列名
df.columns = ['a','b']
df.rename(columns={"A": "a", "B": "b"},inplace=True)
csv、txt文件
pd.read_csv('file_path')
- 没有列名时,第一行会被当做列名
解决办法:
加上header = None
- 所有的数据被当成了一列来处理
解决办法:
加上sep = ' '
写入:
df.to_csv('D:/jupyter/data/mydata/vertex.csv',index = None, header = None)
json文件
import json
path = 'E:/download/reddit/reddit-class_map.json'
with open(path, "r") as f:
row_data = json.load(f)
print(row_data)
复杂json文件
import jsonpath
with open(path, "r") as f:
row_data = json.load(f)
print(jsonpath.jsonpath(row_data, "$.graphName"))
npy文件
import numpy as np
path="D:/tmp/raw/feat.npy"
data = np.load(path)
data
写入:
np.save(path, data)
把float64改成float32
x = np.array(feat,dtype = 'float32')
把array或tensor转成dataframe
scibert_df = pd.DataFrame(data = feat2)
npz文件
import numpy as np
file_path="D:/tmp/raw/adj_full.npz"
poem=np.load(file_path,allow_pickle=True)
poem.files
输出:
print(poem['indices'])
print(poem['indices'].shape)
pkl文件
import pickle
out = pickle.load(open(path, "rb"), encoding="latin1")
out = out.toarray() if hasattr(out, "toarray") else out
out
写入:
with open(save_file, "wb") as f:
pickle.dump(data, f)
with open(label_path, 'wb') as f:
pickle.dump({'tr_label_idx': tr_labels_idx,
'val_label_idx': val_labels_idx,
'test_label_idx': test_labels_idx,
'label': labels}, f)
pt文件
import torch
data = torch.load('D:/tmp/Cora/processed/data.pt')
data
写入:
torch.save(data, path)
pth文件
一般保存的是深度学习训练好的模型或参数
import torch
model= torch.load("resnet18.pth")
print(model)
print(type(model))
-
如果返回的类型是有序字典,则保存的是参数
<class 'collections.OrderedDict'>
-
如果返回的类型是模型名称,则保存的是模型
如果想查看参数和参数维度:
# 1. 字典的遍历默认是遍历 key,所以param_tensor实际上是键值
for param_tensor in model.state_dict():
print(param_tensor,'\t',model.state_dict()[param_tensor].size())
# 2. 参数详情
for p in model.parameters():
print(p)
# 3. 参数总数
print(f'params num {sum([p.numel() for p in model.parameters()])}')
bin文件
bin文件就是将数据按16进制形式存储的二进制文件(binary)
运用python读取bin文件步骤:(1)使用import方法导入os模块;(2)读取文件路径;(3)使用read()方法读取bin文件内容。
import os
def ReadFile():
filepath='E:\\xxxxxx.bin' ## 文件路径引入
binfile = open(filepath, 'rb') ## 打开二进制文件
size = os.path.getsize(filepath) ## 获得文件大小
print(size) ## 打印文件大小
for i in range(size): ## 遍历输出文件内容
data = binfile.read(1) ## 每次输出一个字节
print(data)
binfile.close() ## close文件
if __name__ == '__main__':
ReadFile()
dgl构建的图也是保存成bin文件,可以调用dgl的库读取
import dgl
gs, _ = dgl.load_graphs('./data/{}.bin'.format(dataset))
g = gs[0]
参考资料:
Python pandas库DataFrame对象读取csv、txt文件的用法汇总
pytorch读取.pth文件
pth后缀的网络模型如何读取
pytorch中获取模型参数:state_dict和parameters两个方法的差异比较