如何创建在CSV文件中搜索的功能?

时间:2018-06-26 08:47:50

标签: python csv

编写一个将读取如下所示CSV文件的函数flowers.csv:

petunia,5.95
alyssum,3.95
begonia,5.95
sunflower,5.95
coelius,4.95

查找一朵花的价格并打印出该价格。

import csv

def problem3_7(csv_pricefile, flower):

  f = open(csv_pricefile) 

  for row in f:
    if row[0] == flower:
      print (row[1])    

  f.close() 

我考虑过将CSV文件转换成字典,以便通过搜索花朵来定价。我确实相信通过比较行有更好的方法,但是我似乎无法弄清楚该怎么做。

一行将由例如petunia, 5.95组成,而不仅仅是petunia,这意味着我无法比较rows == flower。我尝试使用row[0][0],因为它仅指花朵的名称,但对我实际上并不起作用。

而且...我想我应该使用一些我目前不使用的csv函数。

有人可以帮我吗?

4 个答案:

答案 0 :(得分:2)

您可以使用csv.reader和字典理解来构建花朵名称和价格之间的映射:

from io import StringIO
import csv

mystr = StringIO("""petunia,5.95
alyssum,3.95
begonia,5.95
sunflower,5.95
coelius,4.95""")

# replace mystr with open(csv_pricefile)
with mystr as fin:
    reader = csv.reader(fin)
    flower_prices = {name: float(price) for name, price in reader}

print(flower_prices)

{'alyssum': 3.95,
 'begonia': 5.95,
 'coelius': 4.95,
 'petunia': 5.95,
 'sunflower': 5.95}

然后通过字典提取特定花朵的价格,例如矮牵牛使用flower_prices['petunia']

答案 1 :(得分:0)

您正在将花朵与第一个字符而不是组成部分进行比较。尝试使用:

Post.joins(:tags).where(Tag.arel_table[:title].in(['tagName1', 'tagName']))

答案 2 :(得分:0)

您可以像这样使用pandas

import pandas as pd
with open(csv_pricefile, 'r') as pricefile:
    df = pd.read_csv(pricefile, names=['flower', 'price'], index_col=0)
    data = df.to_dict(orient='index')
    # now you can get the price
    print(data[flower]['price'])

答案 3 :(得分:0)

import pandas as pd                                                              

src = "/path/to/data.csv"                                       
df = pd.read_csv(src, names=["flower","price"])                                  
print df                                                                         
#       flower  price                                                            
# 0    petunia   5.95                                                            
# 1    alyssum   3.95                                                            
# 2    begonia   5.95                                                            
# 3  sunflower   5.95                                                            
# 4    coelius   4.95                                                            

# Retrieve the row with a flower called petunia                                  
row_result = df.loc[df['flower'] == 'petunia']                                   
print row_result                                                                 
#     flower  price                                                              
# 0  petunia   5.95                                                              

# Retrieve the price of the first row                                            
if row_result:                                                                   
    price = row_result.iloc[0]['price']                                          
    print price                                                                  
    # 5.95                                                                       
else:                                                                            
    print "Not Found"