2012-11-19 2 views
2

저는 파이썬에 처음 접했습니다. 매우 큰 .csv 파일 (680 만 줄)에서 데이터를 처리하려고합니다. 첫 번째 열은 그룹을 제공csv.reader 한 줄에서 읽기 전용

Group1.1 57645 0.0954454545 
Group1.1 57662 0.09556544778 
Group1.13 500 0.357114538 
Group1.13 504 0.320618298 
Group1.13 2370 0.483851368 
Group1.14 42 0.5495688 

두 번째 위치를 제공하고 세 번째는 I가 계산을 실행하는 데에 읽고있다 값을 제공 : 같은 라인의 예를 보일 것이다. 나는이 위치를 기반으로 "슬라이딩 윈도우"에서 이러한 계산을 수행하려고합니다. 또 다른 요인은 각 그룹에 대해 위치 번호가 다시 시작되기 때문에 각 그룹이 서로 별도로 계산된다는 것입니다. 제 코드에서는 먼저 그룹 ID를 목록으로 읽으 려하기 전에 그 목록을 "통합"한 다음 해당 목록을 "슬라이딩 윈도우"를 수행하기위한 기초로 사용합니다. 그런 다음 고유 목록의 다음 그룹 ID로 이동하고 계산을 다시 실행합니다. 여기에 내 코드의 기초입니다합니다 (unique1 기능 목록을 uniqify하는 간단한 방법 :

for row in reader: 
    scaffolds.append(row[0]) 
    unique1(scaffolds) 
    newfile.seek(0) 
    reader=csv.reader((line.replace('\0','') for line in newfile), delimiter="\t") 
    if row[0] == unique_scaffolds[i]: 
     #...perform the calculations 
    else: 
     i+=1 
내가으로 실행하고

내 문제는 내 데이터 세트의 그것은 단지 첫 번째 줄에 읽고 있다는 것입니다 및 . 아무것도 더 나는 바로 "리더 행에 대해"후 "인쇄 행"을 삽입하면, 내가 얻을 수 있도록이 같은 출력 :

['Group1.1', '424', '0.082048032'] 

내가없이 동일한 코드를 작성하면 추가 계산의과 다음 루프는 데이터 세트의 모든 단일 행을 인쇄합니다.이 상황에서이 루프 시작 부분의 모든 행을 어떻게 읽습니까?

제안이나 의견을 미리 보내 주셔서 감사합니다. 내가 충분히 명확하지 않다면 알려주십시오. 나는 더 설명하려고 노력할 수 있습니다. 감사!

+1

각 반복마다 독자를 다시 정의해야합니까? (예제 코드의 5 번째 줄) –

+0

예상되는 결과는 무엇입니까? –

답변

1

매번 독자를 다시 초기화하고 있습니다. 본질적으로 이것이 첫 번째 라인에서 멈추는 원인이됩니다. 사용해보기

reader=csv.reader((line.replace('\0','') for line in newfile), delimiter="\t") 
for row in reader: 
    scaffolds.append(row[0]) 
    unique1(scaffolds) 
    newfile.seek(0) 

    if row[0] == unique_scaffolds[i]: 
     #...perform the calculations 
    else: 
     i+=1 
+0

루프 외부에서 독자 객체를 가져 오는 것에 대한 귀하의 제안을 시도했습니다. 그것은 루프 내부의 부품에 대한 계산에는 영향을 미치지 않았지만 모든 그룹 ID의 고유 목록을 만드는 첫 번째 부분에서는 파일의 첫 번째 행만 읽는 중입니다 ... – abovezero

+0

cvsreader를 실현하십시오. 한 번에 한 줄만 읽습니다. 한 번에 한 줄씩 읽음으로써 자신의 목록을 만들어야합니다. – PearsonArtPhoto

0

루프 내부에서 독자 개체를 교체하는 것처럼 보입니다. 이 문제를 해결하면 (또는 제거하면)이 기능을 사용하는 것이 더 나을 것입니다.