2009-09-23 14 views
0

그래서 matplotlib.mlab에서 csv2rec에 대한 소스 파일을 이해하려고합니다. csv 파일을 가져 와서 특정 형식으로 데이터를 구문 분석하는 데 사용됩니다. 따라서 '234'문자열을 가져 와서 int로 변환 할 수 있습니다. 또는 날짜 문자열을 받아 파이썬 datetimes로 만들 수 있습니다.어떻게 작동합니까?

def get_converters(reader): 

    converters = None 
    for i, row in enumerate(reader): 
     if i==0: 
      converters = [mybool]*len(row) 
     if checkrows and i>checkrows: 
      break 
     #print i, len(names), len(row) 
     #print 'converters', zip(converters, row) 
     for j, (name, item) in enumerate(zip(names, row)): 
      func = converterd.get(j) 
      if func is None: 
       func = converterd.get(name) 
      if func is None: 
       #if not item.strip(): continue 
       func = converters[j] 
       if len(item.strip()): 
        func = get_func(name, item, func) 
      else: 
       # how should we handle custom converters and defaults? 
       func = with_default_value(func, None) 
      converters[j] = func 
    return converters 

이 기능의 문제점은 '변환기'입니다. 그것은 None으로 시작합니다. 그렇다면 나중에 'func = converters [j]'j 열거 형을 통해 방금 생성 된 숫자가 있습니다. 그래서 그것은 j에 의해 인덱싱 된 해당 변환기 항목을 찾고 있습니다. 그러나 변환기가 없기 때문에 아무것도 없습니다. 파이썬 프로그램을 위에서 아래로 읽을 필요가 없다면? 이 경우 다음 두 줄의 "ifen (item.st .... etc)"또는 "else :"섹션에서 func을 얻습니다. 그러나 나는 방금 위에서 아래로 읽어야한다고 생각했다.

다른 모든 것들이 중요하기 때문에 나는 전체 기능을 포함 시켰습니다. converterd는 사용자가 변환기를 자동으로 찾기위한 매개 변수로 제공 할 수 있다고 생각하는 사전 매핑입니다. checkrows는 처음에 유효성을 검사하기위한 매개 변수로 사용자가 제공 한 숫자입니다. 기본적으로 없음입니다. 나는 아직도 초보자이기 때문에 그냥 fyi. =)

모두에게 감사드립니다. 이 사이트는 매우 유용합니다!

converters = [mybool]*len(row) 

하고는 다시 설정됩니다 "컨버터"

답변

2

컨버터를 초기화 다음 실행되도록 내가 첫 번째 반복에, 뭔가를 누락하지 않는 한

1

는 "i"가, 0 루프의 시작

if i==0: 
    converters = [mybool]*len(row) 

그래서 그 후에는 더 이상 없음이 아닙니다.

1

먼저

converters = None 

converters위한 초기 값을 설정한다. 이렇게하면 반복이 발생하지 않으면 (readers이 비어있을 수 있음) 함수가 converters을 반환하면이 값이 존재하고 값은 None이됩니다.

readers 이상의 반복이 일어나는 경우 converters 즉시 반복을 통해 첫 번째 패스에서보다 의미있는 값으로 리셋된다 (경우 i==0)

converters = [mybool]*len(row) 
관련 문제