Я сохраняю вызов класса Задача в массиве в .dat-файле. Я хотел бы прочитать этот файл и восстановить вызовы класса.Как удалить кавычки из инициализатора класса при чтении из файла. Python
Вот класс, который я использую прямо сейчас:
class Task:
def __init__(self, name, timespent):
self.name = name
self.timespent = timespent
def __repr__(self):
return repr('Task("%s",%s)'%(self.name, self.timespent))
Вот чтение из файла:
task_list = []
with open("task_list2.dat", "r") as file:
task_list = eval(file.readline())
Вот запись в файл:
with open("task_list2.dat", "w") as outFile:
print(repr(task_list), file = outFile)
И вот содержание файла: ['Task("class",20)']
Где «класс» - это имя задачи.
Я понимаю, что проблема связана с одиночными кавычками вокруг «Задача (« класс », 20)», но я не знаю, как избавиться от них. Сообщение об ошибке, которое я получаю, говорит что-то в строках: «str-объект не имеет атрибута« name »
Как удалить эти кавычки, чтобы я мог восстановить классы в следующий раз, когда я прочитал файл?
Удалите исходные кавычки в своей функции 'repr'. – SevenBits
Мне любопытно, вместо того, чтобы угадать, что находится в файле (что очень опасно, если кто-то, где заменить содержимое вашего файла вредоносным кодом), почему бы не сохранить задачу, которую нужно выполнить/аргументы как JSON, и проанализировать это? –
@MikeMcMahon: Проблема с JSON заключается в том, что это не полный сериализатор для чего-либо, кроме float, bool, unicode, NoneType, а списки и dicts составляют рекурсивно из вышеперечисленного. В частности, если вы хотите сериализовать объекты своих собственных классов, вам нужно написать сериализатор поверх него. Использование pickle, YAML, jsonpickle или другого формата, который обрабатывает пользовательские типы, означает, что вам не нужно это делать. – abarnert