2014-02-21 2 views
0

Здравствуйте, я пытаюсь заставить эту программу распечатать данные списка для коридора, введенного в вызове класса внизу. Но он выводит только самую последнюю строку в списке. Эта программа принимает файл .csv и превращается в список. Ни в коем случае не очень опытный программист на питоне.Программа только распечатывает последнюю строку списка

class csv_get(object): # class to being in the .csv file to the program 
    import os 
    os.chdir('C:\Users\U2970\Documents\ArcGIS') 
    gpsTrack = open('roadlog_intersection_export_02_18_2014_2.csv', 'rb') 
    # Figure out position of lat and long in the header 
    headerLine = gpsTrack.readline() 
    valueList = headerLine.split(",") 

class data_set(object): # place columns from .csv file into a python dictionary 
    dict = {'DESC' : csv_get.valueList.index("TDD_DESC"), 
    'ROUTE_NAME' : csv_get.valueList.index("ROUTE_NAME"), 
    'CORRIDOR': csv_get.valueList.index("CORRIDOR"), 
    'ROADBED': csv_get.valueList.index("DC_RBD"), 
    'BEG_RP': csv_get.valueList.index("BEG_RP"), 
    'END_RP': csv_get.valueList.index("END_RP"), 
    'DESIGNATION': csv_get.valueList.index("NRLG_SYS_DESC")} 

class columns_set(object): # append the dict into a list 
    new_list = [] 
    for line in csv_get.gpsTrack.readlines(): 
     segmentedLine = line.split(",") 
     new_list.append([segmentedLine[data_set.dict['DESC']],\ 
     '{:>7}'.format(segmentedLine[data_set.dict['ROUTE_NAME']]),\ 
     '{:>7}'.format(segmentedLine[data_set.dict['CORRIDOR']]),\ 
     '{:>7}'.format(segmentedLine[data_set.dict['ROADBED']]),\ 
     '{:>7}'.format(segmentedLine[data_set.dict['BEG_RP']]),\ 
     '{:>7}'.format(segmentedLine[data_set.dict['END_RP']]),\ 
     '{:>7}'.format(segmentedLine[data_set.dict['DESIGNATION']])]) 

class data: 
    def __init__(self,corridor): 
     for col in columns_set.new_list: # for each column in the list new_list 
      self.desc = col[0] 
      self.route = col[1] # assigns column names to column numbers 
      self.corridor = col[2] 
      self.roadbed = col[3] 
      self.beg_rp = col[4] 
      self.end_rp = col[5] 
      self.designation = col[6] 

    def displayData(self): # print data for corridor number entered 
     print self.desc,\ 
      self.route,\ 
      self.corridor,\ 
      self.roadbed,\ 
      self.beg_rp,\ 
      self.end_rp,\ 
      self.designation 

set1 = data('C000021') # corridor number to be sent into data class 
# should print all the corridor data but only prints very last record 
set1.displayData() 

ответ

1

Вы сохраняете данные только из текущей строки и перезаписываете их каждой строкой. Линия как self.desc = col[0] говорит «перезаписать self.desc так относится к значению col[0].

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

Вы действительно должны использовать в Python включены CSV module разобрать стандартный файл CSV в списки списков. он может даже дать вам список словарей и обрабатывать строку заголовка

+0

Хорошо спасибо за ответ Майк. Так что я бы изменил для цикла в инициализации класса данных? –

+0

Huh. хорошо, я определенно открыт для предложений относительно того, как я могу стать лучше в программировании (а не в самой программе). Мне нравится использовать классы таким образом, чтобы я мог легко вызвать их для данных или varaiables, которые они хранят. Но да, они работают как функции. Я сам преподаю на python, поэтому я уверен, что у меня много зависаний. Спасибо, что посмотри, что ты сказал. –

+1

ОК, поэтому я понял свою проблему, и я превратил эти классы, которые являются в основном функциями, в методы в рамках одного класса. Программа хорошо работает, поэтому большое спасибо за помощь. Теперь мне просто нужно выяснить, как сделать больше. –

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