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')

  1. 没有列名时,第一行会被当做列名

    解决办法:
    加上header = None
  2. 所有的数据被当成了一列来处理

    解决办法:
    加上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))
  1. 如果返回的类型是有序字典,则保存的是参数
    <class 'collections.OrderedDict'>

  2. 如果返回的类型是模型名称,则保存的是模型

    如果想查看参数和参数维度:

# 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两个方法的差异比较

posted @ 2022-08-11 09:56  YTT77  阅读(2863)  评论(0编辑  收藏  举报