JMK no matter what

view csv

lang:python
#!/usr/bin/python
import sys

def rows(file, st, en):
    ret = []
    ret.append(["no"] + file.readline().strip().split(","))
    for i in xrange(st): file.readline() # skip st lines
    for i in xrange(st,en+1):
        line = file.readline()
        if line == "": break
        line = line.strip()
        ret.append(map(lambda x: x.strip('"'), [str(i)] + line.split(",")))
    return ret

def printRows(rows):
    wid = reduce(lambda a,b: [max(i,j) for i, j in zip(a,b)], map(lambda x: map(len,x), rows))
    first = True
    for row in rows:
        print "|".join([("%%-%ds" % w) % v for w,v in zip(wid,row)])
        if first:
            print "+".join([("-" * w) for w in wid])
            first = False

if __name__ == "__main__":
    try:
        st = 0
        en = 1000*1000*1000
        if len(sys.argv) == 1:
            printRows(rows(sys.stdin, st, en))
        else:
            file = open(sys.argv[1])
            if len(sys.argv) > 2: st = int(sys.argv[2])
            if len(sys.argv) > 3: en = int(sys.argv[3])
            printRows(rows(file, st, en))
    except IOError:
        pass
2009-12-08 02:47:16 | JM | /quickpost/ | 9 Comments
dasony
2009-12-09 04:13:21
나 1학년 수업 조교할떄도 CSV 파싱 이것보단 제대로 시켰는데!
JM
2009-12-09 11:49:30
뭐가 문제냐 -_-;;
dasony
2009-12-09 18:19:37
따옴표 처리를 안해서 ㅎㅎㅎ
Being
2009-12-10 03:54:43
따옴표 안에서 따옴표 이스케이핑하기!
JM
2009-12-10 04:16:34
변태들 난 그런건 필요없어
ㅂㄹ
2010-04-21 23:04:30
뭔가 맵리듀스를 쓴건 알겠는데 이게 무슨 외계어냐..
JM
2010-04-21 23:21:44
@ㅂㄹ/ wid = reduce.. 요 라인 얘긴가? ㅋㅋ 원래 map 이랑 reduce 를 많이 연결해 쓴 functional code 는 알아보기 힘들음. ㅋㅋ 나도 처음부터 저렇게 친건 아니고, 바닥부터 시작해서 만들어 갔지. 뒤에서부터 보면 이해하기 더 쉬움. 애초에 그렇게 작성했고.

과정을 설명해 보면

흠 각 가로줄마다 각 칸의 가로 길이를 구하고, 각 세로줄마다 최대 길이를 구하고 싶군. 각 가로줄마다 각 칸의 가로 길이를 구하는 건 쉽지. map(len, row) 니까.. 그러면 map(lambda row: map(len, row), rows) 하면 각 칸의 길이 벡터의 벡터를 얻을 수 있겠군. 그러면 여기서 각 벡터마다 elementwise max 로 reduce 하면 되겠는데.. 이거는 파이썬에 없네, 그냥 구현하자. 이런 식?
ㅂㄹ
2010-04-23 14:39:09
친절한 설명 ㄳ 80%는 설명좀 20%는 이런 ㅂㅌ 의 의미여뜸 'ㅅ'
JM
2010-04-25 11:02:23
@ㅂㄹ, 헐퀴

Leave a comment

春來不似春

About

Eventstream

Pages

Guestbook

Search

Site Admin

Recent Comments