2014-02-04 3 views
-1

У меня есть словарь, который берет данные из файла и помещает их в список. Я хочу создать поисковую систему, которая, когда я набираю имя или количество или цену компонента, найдет все с этим именем и распечатаю информацию, которую он держит (цена, количество, категория).Работа со словарями

Входной

Я просто не могу сделать мой сценарий прочитать данные из строк в файле. текст файла выглядит следующим образом:

AMD A4-3300 2.5GHz 2-Core Fusion APU Box|5.179,00 din|58|opis|Procesor 
AMD Athlon II X2 340 3.2GHz Box|4.299,00 din|8|opis|Procesor 
INTEL Celeron G465 1.9GHz Box|3.339,00 din|46|opis|Procesor 
INTEL Celeron Dual Core G550 2.6GHz Box|1.439,00 din|13|opis|Procesor 

Выхода

Вот мой код, который должен быть поисковиком для своих компонентов, я просто не знаю, как я могу взять список формы данные и цель, данные полной информации, например, я печатаю ключевое слово, такое как AMD и устройство для печати, для печати всех компонентов AMD, у которых есть AMD в их названии или цене. Я ставлю диапазон цен, и я получил все цены в этом диапазоне. Я пробовал кое-что, но это не сработает. Послушайте в течение долгого времени, чтобы ответить. Я перевел свой код, могут быть некоторые строки, но я надеюсь, что вы получите картину.

def option_p_components(): 

option = 0 
#component = [] 
components = [] 
while option == 0 : 
    option_comp = option_p_components_str() 
    option_k = int(raw_input("Chose option : ") 
    print "" \ 
      "" 

    if option_k != 1 and option_k != 2 : 
     error = "!!!Error!!!" 
     error_p = " you typed wrong command please try again ." 

     print "-" * 80 
     print error.center(80) 
     print error_p.center(80) 
     print "-" * 80 

     option = 0 

    if option_k == 1 : 
     option_p_d = 0 
     print "Components search " 

     print"-" * 80 

     cu = temp_comp(components) 
     print cu 

     print "X)Working with components(editing, deleting)" 
     print"-" * 80 
     print "1)Change components " 
     print "2)Editing components" 
     print "3)Delating componetns" 
     print "4)Components search " 
     print "5)Back" 
     print"-" * 80 
     option_p_d = int(raw_input("Chose option :")) 

     if Option_p_d == 2 : 
      option_d = 0 

      for I in range(5): 

       u_component_name = raw_input("Unesite naziv komponente :") 
       u_component_price= raw_input("Unestie cenu komponente:") 
       u_component_quantity = raw_input("Unesite kolicinu komponente :") 
       u_component_opis = raw_input("Unesite opis komponente :") 
       u_component_category = raw_input("Unesite kategoriju komponente:") 

       component = {"name_compo":u_komponenta_ime, 
           "price":u_komponenta_cena, 
           "quantity":u_komponenta_kolicina, 
           "opis":u_komponenta_opis, 
           "category":u_komponenta_kategorija} 

       upis_komponente = saving_components(component) 
       components.append(saving_components) 


       print"-" * 80 
       print "1)New component" 
       print "2)Back" 
       print"-" * 80 

       option_d = int(raw_input("Odaberite opciju :")) 

       if option_d == 1 : 

        option_k = 0 

       elif option_d == 2 : 

        option_p_komponenti() 

    elif option_k == 2 : 

     print "Back" 


def saving_components(component): 

final_komponenta = component["name_compo"] + "|" + component["price"] + "|" + componenta["quantity"] + "|"\ 
       + component["opis"] + "|" + component["category"] 

file = open("Data/component.txt", "a") 
file.write(final_component) 
file.close 

Защиту reading_component (компонент):

file = open("Data/component.txt", "r") 
for line in file : 

    name_comp, price, quantity, opis, category = line.split("|") 

    komponenta = {"name_compo": name_comp, 
        "price": price, 
        "quantity": quantity, 
        "opis" : opis, 
        "category": category} 

    # ovo izvlaci samo pojedinacne vrednosti iz recnika 
    compon_info = "Name: " + component["name_compo"] + "\n" + "price: " + component["Price"]+"\n" +\ 
         "Quantity:" + component["quantity"] + "\n" + "Opis: " + komponenta["opis"] + \ 
         "\n" + "category: " + component["category"] + "\n" 

    #print compon_info 
    component.append(component) 
    #print sortiranje(kompon_info) 
    #print sorted([compon_info]) 
    #print compon_info.sort() 
    #Vrti koliko ima u fajlu for ...a to je 7 


file.close() 
return component 

def temp_comp(components): 
    pretraga_po_opisu(komponente) 

def pretraga_po_opisu(komponente): 
    kolicina = str(raw_input("Unesite kolicinu:")) 
    for komponenta in komponente: 

    if komponenta["kolicina"] == kolicina: 
     print komponenta["kolicina"] 
    return None 

def pera(komponente, cena): 
ulaz = input("Unesi") 
list = komponente.pera("cena",cena) 
+0

Вам нужно будет придумать регулярное выражение, чтобы разметить каждую строку. Затем вы можете анализировать каждую строку на основе этого. Когда у вас есть значки, заполнение словаря будет тривиальным. – CoryKramer

+0

Не могли бы вы показать свой код для чтения файла? Не может помочь с этим только – Diegomanas

+0

@Cyber ​​- Регулярное выражение кажется немного переборщиком для этого, как вы думаете? После того, как у вас есть строка, это выглядит как простой 'line.split ('|')' будет работать ... – mgilson

ответ

2

Все, что вам нужно, это csv.DictReader() вместе с последовательностью имен ключей для каждого столбца:

with open(inputfilename, 'rb') as fileobj: 
    reader = csv.DictReader(fileobj, 
     ('name_compon', 'price', 'quantity', 'something_else', 'category'), 
     delimiter='|') 
    for row in reader: 
     print row 

где row является словарь вы хотели ,

0

Если вы хотите, чтобы посмотреть в использовании zip, вы всегда можете использовать его здесь:

component_dicts = [] 
components = ("name_compon", "price", "quanity", "category") 
with open('/path/to/data') as f: 
    for line in f.readlines(): 
     components_dicts.append(dict(zip(components, line.split("|")[:4]))) 
     #slicing the first four elements because you never say which 4 out of 5 you wanted. 

for c in components_dict: 
    print c 

Здесь метод line.split("|") создает список str-х, разделив строку читается везде, где "|" характер найденный.

Тогда zip вернет list из tuples который затем кормить в dict:

# This is what it would look like after you zip the components tuple and the line.split("|") data 
[(name_compon, 'AMD A4-3300 2.5GHz 2-Core Fusion APU Box'), (price, '5.179,00 din'), (quanity, 58), (type, opis)] 
Смежные вопросы