2014-02-21 5 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에 결함이있는 것입니다.

당신은 정말 파이썬은 CSV는 목록의 목록에 파일을 구문 분석 CSV module을 포함 사용해야합니다. 그것은 심지어 당신에게 사전의 목록을 제공하고, 헤더 행을 처리 할 수 ​​있습니다

+0

마이크 Mike에게 감사드립니다. for 루프 데이터 클래스 초기화? –

+0

허. 좋아, 나는 분명히 내가 프로그램에서 더 잘 될 수있는 방법에 대한 제안에 열중하고있다. 나는 그런 식으로 클래스를 사용하여 그들이 보유하고있는 데이터 나 변수에 대해 쉽게 호출 할 수 있습니다. 그러나 그렇습니다 그들은 기능처럼 일하고 있습니다. 나는 스스로 가르쳐 파이썬 그래서 나는 확실히 많은 숙취를 가지고 있습니다. 고마워, 네가 한 말을 들여다 봐라. –

+1

좋아, 그래서 내 문제를 알아 냈어 그리고 기본적으로 기능을하는 클래스를 하나의 클래스 내에서 메서드로 바꿨다. 프로그램이 잘 작동하므로 도움을 주셔서 대단히 감사드립니다. 이제는 더 많은 일을 수행하는 방법을 찾아야합니다. –

관련 문제