编写和编辑文件(Python)

时间:2015-03-18 18:49:33

标签: python file-handling

首先,我想道歉,因为我是Python的初学者。无论如何,我有一个Python程序,我可以用一般形式创建文本文件:

Recipe Name:
Item
Weight
Number of people recipe serves

我正在尝试做的是让程序能够检索配方,并为不同数量的人重新计算成分。该程序应输出配方名称,新人数和新人数的修订数量。我能够检索配方并输出配方但是我不知道如何为不同数量的人重新计算配料。这是我的代码的一部分:

def modify_recipe():
    Choice_Exist = input("\nOkaym it looks like you want to modify a recipe. Please enter the name of this recipe ")
    Exist_Recipe = open(Choice_Exist, "r+")
    time.sleep(2)
    ServRequire = int(input("Please enter how many servings you would like "))

2 个答案:

答案 0 :(得分:1)

我建议将您的工作分成多个步骤,然后继续处理每个步骤(进行研究,尝试编写代码,提出具体问题)。

1)查找python's file I/O。 1.a)尝试重新创建您找到的示例,以确保您了解每段代码的作用。 1.b)编写自己的脚本,完成所需程序的只是 ,即打开一个存在的食谱文本文件或创建一个新文件。

2)在Python中真正使用自己的函数,特别是传递自己的参数。你想要做的是一个很好的“modular programming”的完美例子,如果你想要一个读取输入文件的函数,另一个写入输出文件,另一个提示用户他们编号他们是喜欢多重,等等。

3)为用户输入添加try/except块。如果用户输入非数字值,则可以捕获该值并再次提示用户输入更正值。类似的东西:

while True:
  servings = raw_input('Please enter the number of servings desired: ')
  try:
    svgs = int(servings)
    break
  except ValueError:
    print('Please check to make sure you entered a numeric value, with no'
        +' letters or words, and a whole integer (no decimals or fractions).')

或者,如果您想允许小数,可以使用float()代替int()

4)[半高级]基本正则表达式(又名“正则表达式”)将非常有助于构建您正在制作的内容。听起来您的输入文件将具有严格的,可预测的格式,因此可能没有必要使用正则表达式。但是如果你想接受非标准配方输入文件,正则表达式将是一个很好的工具。虽然学习技巧可能有点困难或令人困惑,但有很多很好的教程和指南。我过去收藏的一些内容是Python CourseGoogle DevelopersDive Into Python。在学习构建自己的正则表达式模式时,我强烈建议使用的一个很棒的工具是RegExr(或许多类似的,例如PythonRegex之一),它会向您显示模式的哪些部分正在工作或不工作为什么

以下是帮助您入门的大纲:

def read_recipe_default(filename):
  # open the file that contains the default ingredients

def parse_recipe(recipe):
  # Use your regex to search for amounts here. Some useful basics include 
  # '\d' for numbers, and looking for keywords like 'cups', 'tbsp', etc.

def get_multiplier():
  # prompt user for their multiplier here

def main():
  # Call these methods as needed here. This will be the first part 
  #  of your program that runs.
  filename = ...
  file_contents = read_recipe_file(filename)
  # ...

# This last piece is what tells Python to start with the main() function above.
if __name__ == '__main__':
  main()

开始可能很难,但最终它非常值得!祝你好运!

答案 1 :(得分:0)

我必须编辑几次,因为我使用Python 2.7.5,但这应该有效:

import time

def modify_recipe():
    Choice_Exist = input("\nOkay it looks like you want to modify a recipe. Please enter the name of this recipe: ")
    with open(Choice_Exist + ".txt", "r+") as f:
        content = f.readlines()
        data_list = [word.replace("\n","") for word in content]

    time.sleep(2)

    ServRequire = int(input("Please enter how many servings you would like: "))

    print data_list[0]
    print data_list[1]
    print int(data_list[2])*ServRequire #provided the Weight is in line 3 of txt file
    print ServRequire

modify_recipe()