2014-02-10 5 views
1

데이터 파일의 줄을 분할하는 데 어려움을 겪고 있습니다.데이터 파일의 줄 분할

1:0 2:120 
1:1 2:131 
1:2 2:26 
1:3 2:568 
1:4 2:176 
1:5 2:28 3:549 
1:6 2:17 
1:7 2:6 3:217 4:401 5:636 
1:8 2:139 

나는 어쩌면 배열의 형태로 ... 각 값을 얻을 수를 분할 할 : 각 라인의 배열을 가질 수 있다는 것을 의미

((1, 2) , (0, 120)) 
((1, 2) , (1, 131)) 
... 
((1, 2, 3, 4, 5) , (7, 6, 217, 401, 636)) 

여기에 몇 줄의 샘플입니다 다른 차원. 두 단계로 나누려고했지만 작동하지 않습니다.

inf = open("datafile.txt", 'r') 

for line in inf: 
line.split() 
for x in line.split(): 
    x.split(':',1) 

답변

3

zip 기능을 사용하여 두 목록의 요소를 그룹화 할 수 있습니다.

with open("Input.txt") as inf: 
    for line in inf: 
     print zip(*map(lambda x: map(int, x.split(":")), line.split())) 

출력

[(1, 2), (0, 120)] 
[(1, 2), (1, 131)] 
[(1, 2), (2, 26)] 
[(1, 2), (3, 568)] 
[(1, 2), (4, 176)] 
[(1, 2, 3), (5, 28, 549)] 
[(1, 2), (6, 17)] 
[(1, 2, 3, 4, 5), (7, 6, 217, 401, 636)] 
[(1, 2), (8, 139)] 

제안 : 그것은 내가 위의 코드에 나와있는 것처럼, with 키워드를 사용하여 파일을 열하는 것이 좋다. 왜냐하면 프로그램이 예외로 실패하더라도 리소스를 닫거나 해제하는 것을 처리 할 것이기 때문입니다.

는 설명 : zip 이후

은 함수 호출의 파라미터는 먼저 평가된다. 나중에 *에 올 수 있습니다. map(lambda x: map(int, x.split(":")), line.split())을 사용하여 line.split() (공백 문자로 문장을 분할하고 목록을 반환)에 의해 반환 된 문자열 목록의 모든 요소에 람다 함수 lambda x: map(int, x.split(":"))을 적용합니다.

각각의 모든 스플릿 단어는 람다 함수에 하나씩 매개 변수로 전달됩니다. 첫 번째 사례를 취하면 먼저 "1:0"x이라는 람다 함수로 보내집니다. :을 기반으로 분할하면 ["1", "0"] 목록이 제공되고 그 다음에 을 부여하면 int 함수가 적용됩니다. 따라서 모든 라인을 분할하고 람다를 적용하면 결과는 다음과 같습니다.

[[1, 0], [2, 120]] 
[[1, 1], [2, 131]] 
[[1, 2], [2, 26]] 
[[1, 3], [2, 568]] 
[[1, 4], [2, 176]] 
[[1, 5], [2, 28], [3, 549]] 
[[1, 6], [2, 17]] 
[[1, 7], [2, 6], [3, 217], [4, 401], [5, 636]] 
[[1, 8], [2, 139]] 

이제 각 목록에 두 개의 요소가 있습니다. 우리는 나중에 논의하기로 결정 * 기억이 목록을 풀고이

zip([1, 0], [2, 120]) 

처럼 zip 함수에 매개 변수 등의 모든 요소를 ​​통과 이제 zip 모든 첫 번째 요소를 선택하고 목록에 넣어 것입니다 , 그리고 두 번째 요소를 모두 선택하여 목록에 넣는 등의 작업을 수행합니다.

이것은 우리가 예상 한 답변을 얻는 방법입니다.

+0

감사합니다. 지금 올바르게 작동합니다. 파이썬에서는 초보자입니다. zip, map 및 lambda에 대한 간단한 설명을 주시겠습니까? – user3041107

+0

@ user3041107 지금 업데이트 된 답변을 확인하십시오. 나는 약간의 설명을 추가했다. – thefourtheye

+0

@ user3041107 또한 도움이된다면 [대답 대답] (http://meta.stackexchange.com/a/5235/235416)을 고려해주십시오. – thefourtheye