2016-05-12 5 views
-1

最初のブロックは、このプログラムで使用される入力ファイルです(単に.txtファイルのみ)。 'SearchByTitle'機能では、ターゲットがリスト内にある場合、ターゲットがリスト内にあれば正しくピックアップされ、正常に印刷されますが、実際のターゲットワードが印刷されます。行全体を印刷する方法はありますか?たとえば、「Sempiternal」が検索された場合、ターゲット単語ではなく、Sempiternal、Bring Me The Horizo​​n、Metalcore、14.50を返すことができますか? また、SortingByPriceを使用すると、それよりも少ないものではなく、ターゲットよりも最も近い価格だけが返されます。リストのリストのターゲットからの行を印刷

正しい方向のナッジはすばらしく、私はこれを数日間しゃべっています。

INPUTファイル:

Sempiternal,Bring Me The Horizon,Metalcore,14.50 
Badlands,Halsey,Indie Pop,19.95 
Wildlife,La Dispute,Post Hardcore,9.60 
Move Along,The All American Rejects,Punk Rock,10.20 

機能:

def createDatabase(CD): 
    aList = [] 
    file = open(CD) 
    for line in file: 
     line = line.rstrip().split(",") #strip \n and split at , 
     aList.append(line)  #add lines into formerly empty aList 
    for i in range(len(aList)): 
     aList[i][3] = float(aList[i][3]) #override line for price to be float 
    return aList 


def PrintList(aList): 
    for line in aList: 
     album = str(line[0]) 
     artist = str(line[1]) 
     genre = str(line[2]) 
     price = str(line[3]) 
     print("Album: " + album + " Artist: " + artist + " Genre: " + genre + " Price: $" + price) 
    return  


def FindByTitle(aList): 
    target = input("Enter Title to Search: ") 
    title = [item[0] for item in aList] 
    for item in title: 
     if target in item: 
      print("Title name found in database: " + target) 
      return aList 
     print("Title not found") 
     return None 


def FindByPrice(aList): 
    target = float(input("Enter Maximum Price: ")) 
    price = [item[3] for item in aList] 
    for item in price: 
     if item <= target: 
      print(item) 
      return aList 
    print("Artist not found") 
    return None 

答えて

0

あなたはそのためのパッケージパンダを使用する必要があります。

import pandas as pd 
df = pd.read_csv(your_input_file) 

df[df[0]=='Sempiternal'] 

パンダのアイデアはAでファイルを保存することですデータフレームの場合、ファイルの操作はループを使用するよりもはるかに簡単です(より効率的です)。 データフレームはRAMに保存されるので、膨大な入力ファイルに注意してください。

+0

異なるタイトルが検索されても、そのアカウントはどういう意味ですか? – Staylor742

+0

私はあなたが何を意味するか分からない。リストを出力するには、タイトルのリストに対応する行を次のようにisin()を使います:df [df [0] .isin(list_of_tunes)] – ysearka

0

それは大きなリストであり、あなたは、あなたがそれを見つけたら、その後、

for row in rows: 
    if row[0] == query: 
     found = row 
     break 

あなたのすべての機能をにクリーンアップすることができ脱出したい場合は、

def find_by_title(rows): 
    query = input('Title: ') 
    found = [row for row in rows if row[0] == query] 
    return found[0] if found else None 

を次のことを試みることができますある程度。 関数名と変数名にはcamelCaseを使用しないでください。snake_caseを使用してください。前者は非常に不愉快です。

関連する問題