2015-05-06 3 views
0

Я прочитал CSV-файл в словаре, где code3 - это ключ. Затем я использую def findAirportCODE(self, code3):, чтобы получить ключ и распечатать данные, связанные с ключом. code3 вводится через вход в a.findAirportCODE(input('enter a code').upper()).использовать ключ для извлечения данных из словаря

import csv 

class Airport: 

    def __init__(self, airportname='', cityname='', countryname='', code3='', lat=0, long=0): 

     self.airportname=airportname 
     self.cityname=cityname 
     self.countryname=countryname 
     self.code3=code3 
     self.lat=lat 
     self.long=long 

class TravelLookUp: 
    def dictAirport(self,filename): 
     self.__airportDict={} 

     f=open(filename, encoding="utf8") 
     csvreader = csv.reader(f) 
     for row in csvreader: 
      airport=Airport(row[1], row[2], row[3], row[4], row[6], row[7]) 
      self.__airportDict[row[4]]=airport 
      #for keys, values in self.__airportDict.items(): 
       #print ('[', keys, ':', values.airportname,']') 


    def findAirportCODE(self, code3): 
     print(self.__airportDict[code3]) 

air=Airport() 
a=TravelLookUp() 
a.dictAirport('airport.csv') 
a.findAirportCODE(input('enter a code').upper()) 

При запуске этой программы показывает:

enter a code: jfk 
<__main__.Airport object at 0x02B826F0> 
enter a code: dub 
<__main__.Airport object at 0x02ABB5F0> 

Программа чтения из файла CSV, как, когда я вхожу в другое code3 он показывает другой код, как описано выше.

CSV-файл, он читает из отформатирован, как это:

3796,Kapalua,Lahania-kapalua,United States,JHM,PHJH,20.962936,-156.673031,256,-10,N,Pacific/Honolulu 
3797,John F Kennedy Intl,New York,United States,JFK,KJFK,40.639751,-73.778925,13,-5,A,America/New_York 
3798,Homestead Arb,Homestead,United States,HST,KHST,25.48855,-80.383567,6,-5,A,America/New_York 
3799,Riverside Muni,Riverside,United States,RAL,KRAL,33.951875,-117.445103,818,-8,A,America/Los_Angeles 

Почему я получаю это сообщение, и как я могу получить его, чтобы распечатать правильную информацию аки данные, связанные с ключом словаря ?

+0

Вы используете Python 2 или Python 3? Если вы используете Python 2, то вы должны использовать объекты «нового стиля» и объявлять свои классы следующим образом: 'class Airport (object):' и 'class TravelLookUp (object):'. Обратите внимание на дополнительный '(object)', который объявляет 'object' в качестве родительского класса. – b4hand

ответ

1

Просто переопределить Airport класс специальный __str__ method так, что он возвращает в виде строки информации, которая вы хотите.

В настоящее время вы печатаете объект, и эта строка, которую вы видите, является способом представления объекта в Python по умолчанию. Это может показаться забавным, но он сообщает вам тип объекта и его уникальный идентификатор.

Эти идентификаторы не совпадают на разных прогонах, как вы это заметили, потому что Python не гарантирует, что они одинаковы для разных прогонов.

Вы спросили, как реализовать __str__, так вот пример:

# inside your existing class Airport definition 
    def __str__(self): 
     return '%s in %s, %s' % (self.airportname, self.cityname, self.countryname) 

Вы можете получить фантазии, или же просто, как вам нравится.

1

Ваш аэропорт не имеет метода __str__, поэтому Python не знает, как его распечатать.

Реализовать __str__ или поочередно заменить класс аэропорта с collections.namedtuple, чтобы получить автоматическую печать и несколько полезных функций:

from collections import namedtuple 
Airport = namedtuple('Airport', 'airportname cityname countryname code3 lat long') 
+0

Когда вы говорите, что выполняете метод __str__, значит ли это написать def __str __ (self) :, и если да, то когда я собираюсь вставить его? верни это? – Albi

+0

Верните подходящую строчную версию своего аэропорта. См. Документы Python. – nneonneo

0

Я бы порекомендовал список как значение словаря, а не объект для этого простого примера. Если вы собираетесь использовать значения в списке, вы всегда можете их использовать во время процесса импорта, чтобы убедиться, что у вас есть правильный тип. Чтобы обойти проблему ввода в списке, вы также можете использовать json для переноса некоторой информации о типе.

Смежные вопросы