检索文件夹中的所有腌制数据
Retrieve all pickled data in a folder
我是 Python 的新手。
我将矩阵保存在特定文件夹中 .pkl
。
我想在这个文件夹上用 for 循环检索腌制数据。
我还希望新变量与我从中读取数据的文件同名。
最后,我想要的是对文件夹Output
中的所有数据进行下面的操作
with open('../Output/MatrixA.pkl', 'rb') as fin:
MatrixA = pickle.load(fin)
使用 sys.modules
和 setattr
会很有魅力:
import pickle
from sys import modules
from os import listdir
main_script = modules['__main__']
for file in [path for path in listdir() if path.endswith('pk1')]:
with open(file, "rb") as fp:
setattr(main_script, fp.name.split('.')[0], pickle.load(fp))
print(a, b, c, d, e, sep='\n')
用于生成示例文件的代码 - a~e.pk1:
import pickle
for i, n in enumerate('abcde'):
with open(f"{n}.pk1", "wb") as fp:
pickle.dump([*iter(range(i))], fp)
输出:
[]
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
但是,如果您将那些 pickles
转换为 json
会更好,因为 pickled 文件 是 相关的 到 python 版本,并且是潜在的威胁。
使用它来转换目录中的所有 .pk1
:
import json
import pickle
from os import listdir
for file in [path for path in listdir() if path.endswith('pk1')]:
with open(file, "rb") as fp:
with open(file.split('.')[0] + ".json", "wt") as fp_json:
json.dump(pickle.load(fp), fp_json)
我是 Python 的新手。
我将矩阵保存在特定文件夹中 .pkl
。
我想在这个文件夹上用 for 循环检索腌制数据。
我还希望新变量与我从中读取数据的文件同名。
最后,我想要的是对文件夹Output
with open('../Output/MatrixA.pkl', 'rb') as fin:
MatrixA = pickle.load(fin)
使用 sys.modules
和 setattr
会很有魅力:
import pickle
from sys import modules
from os import listdir
main_script = modules['__main__']
for file in [path for path in listdir() if path.endswith('pk1')]:
with open(file, "rb") as fp:
setattr(main_script, fp.name.split('.')[0], pickle.load(fp))
print(a, b, c, d, e, sep='\n')
用于生成示例文件的代码 - a~e.pk1:
import pickle
for i, n in enumerate('abcde'):
with open(f"{n}.pk1", "wb") as fp:
pickle.dump([*iter(range(i))], fp)
输出:
[]
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
但是,如果您将那些 pickles
转换为 json
会更好,因为 pickled 文件 是 相关的 到 python 版本,并且是潜在的威胁。
使用它来转换目录中的所有 .pk1
:
import json
import pickle
from os import listdir
for file in [path for path in listdir() if path.endswith('pk1')]:
with open(file, "rb") as fp:
with open(file.split('.')[0] + ".json", "wt") as fp_json:
json.dump(pickle.load(fp), fp_json)