<p><strong>你会注意到一些事情……</strong><br/>
1我删除了很多你在循环之前列出的变量。你不需要在循环之前列出它们。<br/>
2我把它换成了while循环。我个人喜欢一行一行读东西的吸引力<br/>
三。我在“名称”部分中写了类别,这是因为新配方开始时,类别并不总是列出的,所以我认为最好使用最后一个已知的类别,并将其插入每个新配方的前面。<br/>
4您的份量并不总是列出来的,所以我冒昧地在那里添加了一个复选框,以便它会返回“未列出来的份量”以防万一。<br/>
5我在配料上打了个圈。你知道吗</p>
<p><strong>备注:</strong><br/>
1由于每个<code>if step == 1 and line:</code>中都有<code>and line</code>,所有的空行都被完全忽略。变量<code>line</code>从所有行返回中剥离,因此while循环跳过所有新行。这些步骤只是确保在跳过每一个空行之后我们所做的事情是正确的。<br/>
2坚果面包听起来很好吃</p>
<p><strong>代码:</strong></p>
<pre><code>category=''
step=0
menu = open("menuTextFormat.txt", 'r')
xml = open('menuTextXML.txt', 'w')
xml.write("<recipe>\n")
while 1:
line = menu.readline()
if not line:
break
#after checking for EOF, remove \n
line = line.rstrip()
#category
if ":" in line:
#set category as next line
category = menu.readline().rstrip()
step=1
continue
#name & servings
if step == 1 and line:
#write category
xml.write("\t<category>\n\t\t" + category + "\n\t</category>\n")
#write name
xml.write("\t<name>\n\t\t" + line + "\n\t</name>\n")
#check for serving size
servings = menu.readline().rstrip()
if not servings:
xml.write("\t<servings>\n\t\tno serving size listed\n\t</servings>\n")
else:
xml.write("\t<servings>\n\t\t" + servings + "\n\t</servings>\n")
step=2
continue
#ingredients
if step == 2 and line:
#write first ingredient, then loop for rest
xml.write("\t<qty>\n\t\t" + line + "\n\t</qty>\n")
xml.write("\t<ingredient>\n\t\t" + menu.readline().rstrip() + "\n\t</ingredient>\n")
#loop for incredients
while 1:
qty = menu.readline().rstrip()
#no more incredients, break loop
if not qty:
break
xml.write("\t<qty>\n\t\t" + qty + "\n\t</qty>\n")
xml.write("\t<ingredient>\n\t\t" + menu.readline().rstrip() + "\n\t</ingredient>\n")
step=3
continue
#procedure
if step == 3 and line:
#write first step, then loop for rest
xml.write("\t<procedure>\n")
xml.write("\t\t<step>\n\t\t\t" + line + "\n\t\t</step>\n")
#loop for steps
while 1:
step = menu.readline().rstrip()
#no more steps, break loop
if not step:
break
xml.write("\t\t<step>\n\t\t\t" + step + "\n\t\t</step>\n")
xml.write("\t</procedure>\n")
step=1
continue
xml.write("</recipe>")
menu.close()
xml.close()
</code></pre>
<p><strong>输出:</strong></p>
<pre><code><recipe>
<category>
Breakfast Breads
</category>
<name>
Gluten Free Nut Loaf
</name>
<servings>
Makes 1 loaf
</servings>
<qty>
150 g (51/2 oz./11/2 cups)
</qty>
<ingredient>
almond meal
</ingredient>
<qty>
30 g (1 oz./1/4 cup)
</qty>
<ingredient>
walnuts, coarsely chopped
</ingredient>
<qty>
1/4 teaspoon
</qty>
<ingredient>
gluten-free baking powder
</ingredient>
<qty>
1 teaspoon
</qty>
<ingredient>
ground cinnamon
</ingredient>
<qty>
95 g (31/4 oz./3/4 cup)
</qty>
<ingredient>
arrowroot (tapioca) flour
</ingredient>
<qty>
1/2 teaspoon
</qty>
<ingredient>
sea salt
</ingredient>
<qty>
3
</qty>
<ingredient>
organic eggs
</ingredient>
<qty>
1/2 teaspoon
</qty>
<ingredient>
stevia powder
</ingredient>
<qty>
3 tablespoons
</qty>
<ingredient>
grape seed oil
</ingredient>
<qty>
2 tablespoons
</qty>
<ingredient>
coconut Milk
</ingredient>
<qty>
1 teaspoon
</qty>
<ingredient>
apple cider vinegar
</ingredient>
<procedure>
<step>
Preheat the oven to 180∫C (350∫F/Gas 4).
</step>
<step>
Grease a 20 x 9 cm (8 x 31/2 inch) loaf (bar) tin.
</step>
<step>
Put the almond meal, walnuts, baking powder, cinnamon, arrowroot flour and salt in a large bowl and mix well with a wooden spoon.
</step>
<step>
Crack the eggs into a separate bowl and whisk using an electric mixer until pale and fluffy, about 11/2 minutes.
</step>
<step>
Add the stevia, grape seed oil, coconut milk and vinegar and mix gently.
</step>
<step>
Pour the mixture into the dry ingredients and stir to combine.
</step>
<step>
Spoon the mixture into the greased tin and bake for about 40 minutes, or until a skewer inserted in the centre of the loaf comes out clean.
</step>
<step>
Remove the bread from the oven and leave to cool in the tin for a few minutes, before turning out onto a wire rack to cool completely.
</step>
<step>
Enjoy the bread melt-in-the-mouth warm, or at room temperature with your favourite topping.
</step>
</procedure>
<category>
Breakfast Breads
</category>
<name>
Basic Gluten Free Loaf
</name>
<servings>
no serving size listed
</servings>
<qty>
2Ω cups
</qty>
<ingredient>
blanched almond flour
</ingredient>
<qty>
Ω teaspoon
</qty>
<ingredient>
baking soda
</ingredient>
<qty>
1 tsp.
</qty>
<ingredient>
bicarbonate of soda
</ingredient>
<qty>
3
</qty>
<ingredient>
eggs beaten
</ingredient>
<qty>
1 tsp.
</qty>
<ingredient>
stevia powder
</ingredient>
<qty>
Ω teaspoon
</qty>
<ingredient>
apple cider vinegar
</ingredient>
<qty>
!!
</qty>
<ingredient>
Pinch sea salt
</ingredient>
<procedure>
<step>
Preheat oven to 250 degrees Celsius
</step>
<step>
Grease a small loaf pan
</step>
<step>
Combine dry ingredients in a bowl
</step>
<step>
In a separate bowl place eggs and apple cider vinegar
</step>
<step>
Spoon the mixture into loaf pan
</step>
<step>
Bake for 50 mins until set
</step>
<step>
Cool on wire rack
</step>
<step>
Slice when cool
</step>
</procedure>
</recipe>
</code></pre>