2016-11-30 2 views
0

텍스트 파일 내에서 문자열을 검색하고 발견 된 행을 인쇄해야하는 프로그램에서 작업하고 있습니다. 다음 줄에 문제 : 내가 수동으로 성분에서 개최되는 문자열을 입력하지 않는 한문자열의 세그먼트가 "if"문에서 작동하지 않습니다.

if ingredient[8:] in line : 

아무것도가 끝나지는, 인쇄되는 [8]. 예 :

if "tomato" in line : 

이것은 완벽하게 작동합니다. 나는 왜 "토마토"나 "렌즈 콩"이 "성분 [8 :]"대신에 효과가 있는지 알 수 없습니다. 여기에 테스트 텍스트 파일에 저장되어있는 텍스트입니다

# VARIABLES 
shoppingList=[] 

# MOVE CONTENTS OF SHOPPING LIST FILE ONTO LIST 
with open("Recipe Shopping List.txt") as f: 
    content = f.readlines() 

def findRecipe(): 

    # PROMPT USER FOR RECIPE NAME 
    print "Enter a recipe name: " 
    recipeInput = raw_input() 
    recipeIndex = content.index(" - " + recipeInput + "\n") 

    # PUT INGREDIENTS INTO SHOPPING LIST 
    for ingredient in content[recipeIndex+1:]: 
     if ingredient.startswith(" -"): 
      # FIND INGREDIENT'S CATEGORY IN CATEGORY FILE 
      with open("Ingredient Category List.txt") as categoryFile : 
       for line in categoryFile : 
        if ingredient[8:] in line : 
         print line 
     else: 
      break 

findRecipe() 

그리고 :

"성분 종류 List.txt 파일"

tomato - produce 
carrot - produce 
celery - produce 
lentil - grains 

다음

내 코드입니다 "Recipe Shopping List.txt"

- Lentil soup 
    - 2 lentil 
    - 3 tomato 
    - 4 celery 
    - 4 carrot 
    - Gnocchi 
    - 1 tomato 
    - 3 gnocchi 
    - 2 onion 

도움을 주셔서 감사합니다.

+0

@leaf 답장을 보내 주셔서 감사합니다. '재료 '는 "- 2 렌즈 콩"과 같은 문자열을 가지고 있기 때문에 음식의 이름 만 들어있는 부분 문자열을 참조하려고 했으므로이 경우 성분 [8 :]이 "렌즈 콩"이 될 것이라고 생각했습니다 . '성분 [8 :]'을 인쇄 할 때, 나는 "렌즈 콩"을 얻고 그것은 str 타입입니다. – user1861051

+1

내 잘못입니다. 나는 실수를 저질렀다. 내 의견을 삭제하겠습니다. –

답변

4

성분 [8 :]에는 줄 바꿈이 포함됩니다. 하나 개의 문자 짧게 잘라 :

if ingredient[8:-1] in line: 

더 나은 아직이 라인을 분할하고 당신이 필요로하는 하나 개의 필드를 꺼내 능숙하게 공백을 박탈. 이 반환 것

'lentil' 

:

'lentil 
' 

당신은에 줄을 변경할 수 있습니다 예를 들어, 대신 그래서이 줄뿐만 아니라 새로운 라인을 반환

+0

그게 효과가! 고맙습니다. – user1861051

1
ingredients[8:] 

ingredients[8:].rstrip() 
+0

감사합니다. rstrip() 메소드에 대해 정말 잘 알고 있습니다. – user1861051

관련 문제