2014-12-23 5 views
0

나는 다양한 길이의 쉼표로 구분 된 줄이있는 큰 csv가 있습니다. 다른 데이터 세트를 정렬하기 위해 루프를 사용하여 필드를 구분하기 위해 split(',')을 사용했지만이 방법은 각 행에 같은 수의 항목이 있어야합니다. 내가 줄을 볼 수있는 방법이 있으며 총 항목 수와 관계없이 N 번째 항목을 당기시겠습니까? 참고로, 내가 사용 된 방법은 보이는 선으로 작동합니다파이썬에서 쉼표로 구분 된 목록의 N 번째 항목 찾기

entry = 'A,B,C,D' 

(a,b,c,d) = entry.split(',') 
print a,b,c,d 

하지만 A와는 A, B, C, D, E, F처럼 보이는 경우에도 C를 끌어 싶습니다 AAA,BBB,CCC,DDD 같은 또는 A, B, C

답변

2

별도의 변수 대신 목록을 사용하십시오.

list = entry.split('.'); 
print list[0], list[2] 
+0

완벽한 덕분에! – ss32

0

그냥 목록 사용

xyzzy = entry.split(","); 
print xyzzy[0], xyzzy[2] 

을하지만 가변 요소 카운트의 가능성을 허용하면, 당신은 아마 더 나은 너무 적은 수 있도록 것, 알고 있어야 :

entry = 'A,B' 
xyzzy = entry.split(","); 
(a,c) = ('?','?') 
if len(xyzzy) > 0: a = xyzzy[0] 
if len(xyzzy) > 2: c = xyzzy[2] 

print a, c 
0

결과에 대한 색인을 생성하지 않으려는 경우, 값이 너무 적거나 많지 않은 상황을 처리하기 위해 자체 함수를 작성하는 것이 어렵지 않습니다. 설정하는 데 몇 줄의 코드가 필요하지만 이점은 results[0]results[2]과 같은 익명의 결과 대신 의미있는 이름을 결과에 부여 할 수 있다는 것입니다.

def splitter(s, take, sep=',', default=None): 
    r = s.split(sep) 
    if len(r) < take: 
     r.extend((default for _ in xrange(take - len(r)))) 
    return r[:take] 

entry = 'A,B,C' 
a,b,c,d = splitter(entry, 4) 
print a,b,c,d # --> A B C None 

entry = 'A,B,C,D,E,F' 
a,b,c,d = splitter(entry, 4) 
print a,b,c,d # --> A B C D 
관련 문제