Файл не создается - Python - pickle - PullRequest
0 голосов
/ 04 мая 2020

В настоящее время я изучаю python, я написал программу, которая рассчитывает стоимость создания 3D-печати на основе затрат на принтер, накладных расходов, прибыли и т. Д. c. У меня есть базовая программа, работающая корректно и пытающаяся добавить функцию, в которую пользователь может войти и сохранить свою стоимость, чтобы ее можно было настроить для каждого пользователя.

Я пытался использовать pickle для сохранения / загрузки словаря. хранить эти значения (не уверен, что это лучший подход?). Первоначально это работало, но теперь я получаю проблему, что файл pkl не создается, если я запускаю код. Конечно, я упускаю что-то простое, но любая помощь приветствуется.

Вот код, который я использую

import pickle

printer_vars = {'cost':9999999999, 'life_expectancy':5, 'yearly_work_time':1200, 'bed_surface':16, 'belts':10, 'nozzles':11, 'hotend':49, 'power_per_hour':0.25, 'power_price':0.15}

# write python dict to a file
def save_defaults():
    printer_vars_stored = open('printer_vars.pkl','wb')
    pickle.dump(printer_vars, printer_vars_stored, pickle.HIGHEST_PROTOCOL)
    printer_vars_stored.close()

# read python dict back from the file

def open_defaults():
    printer_vars_open = open('printer_vars.pkl','rb')
    printer_vars = pickle.load(printer_vars_open)
    printer_vars_open.close()
    return printer_vars

1 Ответ

0 голосов
/ 04 мая 2020

Я тоже новичок в python, но я думаю, что JSON - лучший формат. Вот некоторый код, который я написал для сохранения и чтения вашего файла в JSON файлах. Я также добавил код, чтобы убедиться, что он сохраняет и открывает файлы. json из того же каталога, в котором находится файл сценария.

Я уверен, что есть лучшие способы сделать это, и я в основном написал это как вызов для себя:)

import pickle
import json
#I'm importing os, and sys to make sure that the file is saved in the same directory as the scriptfile.
#If you want to change this, look for the comment that says #PATH.
import os
import sys


#This function takes two arguments. One is the dict containing the 3D printer data.
#The other is a string to name the file. Note that i'm adding the file type '.json', so only provide the name, ex: 'test'
def save_printer_dict(inData,fileName):
    try:
        #PATH, change the code: sys.path[0] if you want a static filepath
        with open(os.path.join(sys.path[0], fileName+'.json'),'w') as outfile:
            json.dump(inData, outfile)
        return True
    except:
        print("Dict received not in proper format")
        return False
#This function takes a fileName as a string, adds '.json' to it, opens the content and adds it to a dict that is returned.
def open_printer_dict(fileName):
    try:
        returnData = {}
        #PATH, change the code: sys.path[0] if you want a static filepath
        with open(os.path.join(sys.path[0], fileName+'.json'),'r') as infile:
            returnData = json.load(infile)
        return returnData
    except:
        print("Can't find "+str(fileName)+".json")
        return None


#Here i'm just trying the functions to make sure they work.
printer_vars = {'cost':9999999999, 'life_expectancy':5, 'yearly_work_time':1200, 'bed_surface':16, 'belts':10, 'nozzles':11, 'hotend':49, 'power_per_hour':0.25, 'power_price':0.15}

if save_printer_dict(printer_vars,"test"):
    print("File saved")

#Calling this function with a valid filename returns a python dict.
print(open_printer_dict("test"))
...