Есть ли способ загрузить объекты с именами с помощью joblib? - PullRequest
0 голосов
/ 10 марта 2020

Я хочу загружать объекты очень просто. Мне нравится load("OBJECT.Rdata") в R. Я хочу использовать joblib в Python из-за широкого охвата и сжатия. Но я не могу загрузить глобальные объекты как эти собственные имена.

Есть ли способ загрузить объекты как эти имена с помощью joblib? (Я использую Windows ОС.)

# Making object files by joblib.
import joblib
obj1, obj2 = [1], [2]
with open('obj1.joblib', "wb") as jlf:
    joblib.dump(obj1, jlf, compress=3)
with open('obj2.joblib', "wb") as jlf:
    joblib.dump(obj2, jlf, compress=3)
del(obj1,obj2)

# This is OK. But this is too long and I have to write object names every time.
import joblib
from pathlib import Path
obj1, obj2 = [], []      # I have to write this every time.
args = ('./obj1.joblib', './obj2.joblib')
filelist = list(args)
for i in range(len(filelist)):
    p_file = Path(filelist[i])
    r = (
        'with open("' + str(p_file) + '","rb") as jlf: '
        + p_file.stem + ' = joblib.load(jlf)'
    )
    rs = repr(r)[1:-1]
    exec('global ' + p_file.stem)
    exec(rs)


# I want to achieve above by simple function.
# This is NG. This does not load globally.
def load(*args):
    import joblib
    from pathlib import Path
    filelist = list(args)
    for i in range(len(filelist)):
        p_file = Path(filelist[i])
        r = (
            'with open("' + str(p_file) + '","rb") as jlf: '
            + p_file.stem + ' = joblib.load(jlf)'
        )
        rs = repr(r)[1:-1]
        exec('global ' + p_file.stem)
        exec(rs)

load('./obj1.joblib', './obj2.joblib')
...