2016-05-12 38 views
-1

第一個塊是在此程序中使用的輸入文件(僅僅是.txt文件)。 在'SearchByTitle'函數中,如果目標位於列表中並且已成功打印出來,它將正確拾取,但它只會打印出實際的目標單詞。有沒有辦法讓它打印出整條生產線?例如,如果搜索到「Sempiternal」,是否可以返回Sempiternal,帶來地平線,Metalcore,14.50,而不僅僅是目標單詞? 此外,當SortingByPrice時,它只會返回小於目標的最接近的價格,而不是所有更少的價格。列表中的列表中的目標打印行

任何在正確的方向微調將是偉大的,我一直在這個好幾天搞砸了。

輸入文件:

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'] 

大熊貓的想法是你的文件存儲在數據幀,那麼對文件的操作比循環要容易得多(而且效率更高)。 只要記住數據幀將被存儲到你的RAM中,所以要注意巨大的輸入文件。

+0

但是,如果搜索到不同的標題,這是如何解決的? – Staylor742

+0

我不確定我明白你的意思。如果你想打印一個列表,你可以使用isin()這樣的標題列表對應的行:df [df [0] .isin(list_of_tunes)] – ysearka

0

你可以嘗試以下方法,

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 

如果它是一個大名單,你想打出來,一旦你發現了它,然後

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

您的所有功能都被清理到在一定程度上。 請不要將camelCase用於功能和變量名稱,請使用snake_case。前者是非常令人厭惡的。