Запись и чтение списков в текстовые файлы в Python: есть ли более эффективный способ?

Ниже приведена программа, которая просит пользователя ввести рецепт и сохранить свои ингредиенты в наборе списков. Затем программа сохраняет данные списка в текстовый файл. Если выбран вариант 2, он будет извлекать сохраненные данные из текстового файла и загружать его обратно в программу для обработки и отображаться пользователю.

Текстовому файлу не нужно хранить данные в формате, удобочитаемом человеком, но после извлечения он должен быть в формате, в котором каждый элемент списка может быть идентифицируемым, а значения величин должны быть в состоянии выполнить расчет.

Мой метод заключался в том, чтобы легко сбрасывать списки в текстовый документ. При извлечении данных он сначала добавляет каждую строку к переменной, удаляет квадратные скобки, речевые метки и т. Д., А затем разбивает их обратно в список.

Кажется, это довольно длинный и неэффективный способ сделать это. Конечно, есть более простой способ хранения данных списка в файл, а затем возврат обратно в список?

Итак, есть ли более эффективный способ? Или, есть ли альтернативный метод, который снова более прост / эффективен?

while True: print("1: Enter a Recipe") print("2: Calculate Your Quantities") option = input() option = int(option) if option == 1: name = input("What is the name of your meal?: ") numing = input("How many ingredients are there in this recipe?: ") numing = int(numing) orignumpep = input("How many people is this recipe for?: ") ingredient=[] quantity=[] units=[] for x in range (0,numing): ingr = input("Type in your ingredient: ") ingredient.append(ingr) quant = input("Type in the quantity for this ingredient: ") quantity.append(quant) uni = input("Type in the units for this ingredient: ") units.append(uni) numing = str(numing) ingredient = str(ingredient) quantity = str(quantity) units = str(units) recipefile = open("Recipe.txt","w") recipefile.write(name) recipefile.write("\n") recipefile.write(numing) recipefile.write("\n") recipefile.write(orignumpep) recipefile.write("\n") recipefile.write(ingredient) recipefile.write("\n") recipefile.write(quantity) recipefile.write("\n") recipefile.write(units) recipefile.close() elif option == 2: recipefile = open("Recipe.txt") lines = recipefile.readlines() name = lines[0] numing = lines[1] numing = int(numing) orignumpep = lines[2] orignumpep = int(orignumpep) ingredients = lines[3].replace("/n", "").replace("[", "").replace("]","").replace("'", "").replace(",", "") quantitys = lines[4].replace("/n", "").replace("[", "").replace("]","").replace("'", "").replace(",", "") unitss = lines[5].replace("/n", "").replace("[", "").replace("]","").replace("'", "").replace(",", "") ingredient=[] quantity=[] units=[] ingredient = ingredients.split() quantity = quantitys.split() units = unitss.split() for x in range (0,numing): quantity[x] = int(quantity[x]) numberpep = input("How many people is the meal for?") numberpep = int(numberpep) print("New Ingredients are as follows...") for x in range (0,numing): print(ingredient[x], " ", quantity[x]/orignumpep*numberpep, units[x]) input() 

Большое спасибо!

2 Solutions collect form web for “Запись и чтение списков в текстовые файлы в Python: есть ли более эффективный способ?”

Вы можете использовать формат сериализации; Python предлагает несколько.

Для списка или словаря, содержащего строковую информацию, я бы использовал JSON через модуль json , так как это формат, который можно прочитать:

 import json # writing with open("Recipe.txt","w") as recipefile: json.dump({ 'name': name, 'numing': numing, 'orignumpep': orignumpep, 'ingredient': ingredient, 'quantity': quantity, 'units': units}, recipefile, sort_keys=True, indent=4, separators=(',', ': ')) # reading with open("Recipe.txt") as recipefile: recipedata = json.load(recipefile) # optional, but your code requires it right now name = recipedata['name'] numing = recipedata['numing'] orignumpep = recipedata['orignumpep'] ingredient = recipedata['ingredient'] quantity = recipedata['quantity'] units = recipedata['units'] 

json.dump() будет выдавать очень читаемые данные, и, самое главное, вам не нужно что-либо преобразовывать в целые числа или списки; это все сохранилось для вас.

Как уже упоминалось, вы можете сериализовать свои данные с помощью json, и я хочу упомянуть модуль pickle для сериализации. Вы можете использовать модуль pickle для хранения всех данных:

 import pickle with open("Recipe.txt", "wb") as fo: pickle.dump((ingredient, quantity, units), fo) 

И загружать данные:

 with open("Recipe.txt", "rb") as fo: ingredient, quantity, units = pickle.load(fo) 
  • Переместить все нули в начало списка в Python
  • Создайте дополнение списка, сохраняющее повторяющиеся значения
  • Python: поиск максимальных данных
  • Проверьте, существует ли элемент в кортеже кортежей
  • Внешний вид на месте
  • Наименьший путь для расширения списка по n
  • Python: как вы вставляете в список, нарезая?
  • Инициализировать список до определенной длины в Python
  • Как математически вычитать элементы в двух списках на Python и выводить только те элементы, которые соответствуют условию?
  • изменение выхода
  • у python есть конструктор списка?
  • Python - лучший язык программирования в мире.