2014-04-14 64 views
0

在我的程序開始時,我打開了一個文件f = open("foods.txt", "r+")。後來我打電話給我創建的這種方法第二次閱讀時在文本文件中查找項目

def findFood(food): 
    foodRegex = re.compile(r'(?P<food>\S+)\s+\-.*') 
    for line in f.readlines(): 
     print line 
     duplicateFound = re.search(foodRegex, line) 
     if duplicateFound.group('food') == food: 
      return duplicateFound 
     else: 
      return False 

但是我再次運行該方法。但是我的程序無法按照我想要的方式工作。具體

def build_meal_plan(): 
    number_of_items = int(raw_input("How many items would you like to add to your meal plan? ")) 
    count = 0 
    while number_of_items > 0: 
     print count 
     food = raw_input("Enter in food name: ") 
     print food 
     if findFood(food): 
      servings = int(raw_input("Number of servings: ")) 
     else: 
      print "Food not found! Try again? (y/n): ", 
      choice = raw_input() 
      if choice == 'y' or choice == "yes": 
       number_of_items += 1 
      else: 
       return 

但是我findFood法的第二次運行期間,我無法找到我知道一個項目.txt文件中存在。我不知道爲什麼我在第一次運行期間找不到在文本文件中找到的相同項目。我的假設是,你只能經歷一次txt文件。

+3

一旦你調用'f.readlines()',你就在文件的末尾。你需要'f.seek(0)'返回到開始。或者,將文件導入到列表中並對其進行處理。 – jonrsharpe

+0

@jonrsharpe在這裏仍然學習python。您能否詳細說明「或者,將文件導入到列表中並對其進行處理」 – Liondancer

回答

1

一旦您撥打f.readlines(),您就在文件末尾。要返回到開始,這樣你就可以再經歷一遍,叫f.seek(0)

def findFood(food): 
    foodRegex = re.compile(r'(?P<food>\S+)\s+\-.*') 
    for line in f.readlines(): 
     ... 
    f.seek(0) 

或者,你可以導入該文件的內容的列表:

def import_file(filename): 
    with open(filename) as f: 
     content = [line.strip() for line in f] 
    return content 

並使用它的回頭看文件。

def findFood(food, data): 
    foodRegex = re.compile(r'(?P<food>\S+)\s+\-.*') 
    for line in data: 
     ... 

然後你不必擔心返回到開始。

+0

謝謝您的提示!正是我需要的! – Liondancer