2017-10-01 22 views
0

申し訳ありませんが、私はあまりにもこの言葉をどのようにフレーズするかわかりません。 私は調理などで使用されるハーブのデータベースを作成しており、pythonスクリプトを使用してデータベースを検索しています。同じ名前の複数のデータベースエントリを印刷する

私は基本的に同じ名前または類似のもの(シベリア人参およびパンジャインなど)を持つ複数のエントリをデータベースに持っています。私はその中に名前が入っているすべてのエントリー(例えば、人参など)を印刷したいが、どうしたらいいか分からない。

これはこれまでのところ私のコードです:

while True: 

    herb=input("Herb: ") 

    database=open("db.txt") 

    for line in database: 
     record = line.split('|') 
     if record[0] == herb: 
      found = True 
      break 
     else: 
      found = False 
      continue 

    if found == False: 
     print("No herbs in database.") 
     print('') 
    else: 
     print(record[0]) 
     print(record[1]) 
     print(record[2]) 
     print(record[3]) 
     print('') 

出力のみしかし、私はどこにでもそれに名前を持つすべてのエントリが表示されるようにしたい、それにハーブ(人参)を持つ最初のエントリを表示します。
この質問に既に回答されている場合、または私はそれを正しく表現していない場合はお詫び申し上げます。

+0

データベースと純粋なテキストファイルは少し違うものです。 SQLiteのようなデータベースを使用していない理由は何ですか?次に、あなたは非常に簡単に名前を照会することができます –

答えて

0

あなたのレコードを反復しているように見えますが、一致するエントリが見つかったらすぐにループを抜けてすぐに印刷してください。

あなたがやりたいことは、レコード配列をとり、見つかったときにそれを印刷してループを壊さないprintHerbs関数を作ることです。

ループの最後に到達しても何も表示されない場合は、表示されません。あなたは、文字列は、使用可能な別の文字列の部分文字列である場合と一致するようにしようとしている場合

また
herb=input("Herb: ") 

database=open("db.txt") 

def printHerbs(record): 
    print(record[0]) 
    print(record[1]) 
    print(record[2]) 
    print(record[3]) 
    print('') 

found = False; 
for line in database: 
    record = line.split('|') 
    if herb.lower() in record[0].lower(): 
     found = True 
     printHerbs(record) 

if found == False: 
    print("Herb not found in database") 

:それは次のようになります

if "Ginsing" in "Ginsing Tea": 
    print("Found") 

.lower()メソッドは、確認します両方の文字列は比較されるときに小文字になります。

+0

私はOPが 'レコードの[0]'条件のハーブを探していると思います。それは "シベリア人参"の "人参"と一致するはずです。 – VPfB

+0

私は答えを更新することができます、本当に確かではなかった... – Asleepace

+0

答えをありがとう、はい、申し訳ありません私は正確にはっきりしていなかったが、それはうまく動作します、ありがとう! –

関連する問題