第一个块是此程序中使用的输入文件(只是一个.txt文件)。 在' SearchByTitle'功能,如果目标在列表中,它正确地拾取,以及成功打印出来,但是,它只会打印出实际的目标字。有没有办法让它打印出整条生产线?例如,如果' Sempiternal'被搜查了,它能否归还Sempiternal,Bring Me The Horizon,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 :(得分:0)
您应该使用Pandas包:
import pandas as pd
df = pd.read_csv(your_input_file)
df[df[0]=='Sempiternal']
pandas的想法是将文件存储在数据框中,然后对文件的操作比使用循环更容易(并且效率更高)。 请记住,数据帧将存储到您的RAM中,因此请注意大量输入文件。
答案 1 :(得分: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
。前者非常令人反感。