2014-07-07 6 views
1

플로팅에 사용할 파일이 두 개 있습니다. 하나는 x, y 범위를 포함하고 다른 하나는 데이터를 포함합니다.두 파일의 파이썬 목록 만들기

다음은 CSV 판독기를 사용하여 하나의 파일에서 데이터를 가져 오는 코드입니다.

import csv 
with open('range.dat', 'r') as f,open('data,dat','r') as d: 
     reader = csv.reader(f) 
     reader1 = csv.reader(d) 
     for row in reader: 
      print row 
      x, y = map(float, row[0:2]) 
      print [x,y] 

이제 문제 I는 동일한 행에서 동시에 data.dat 데이터를 원하는된다 (I은 X의 데이터 range.dat에서 파일의 각 라인의 Y \ n 개의 형식이) 최종 목록이 [x, y, data]가되도록 [x, y]에 추가하려고합니다. 동일한 루프에서 data.dat 콘텐츠를 통해 반복 할 수있는 방법이 있습니까?

답변

4

아마도 두 사람의 독자가 함께 zip 일 것입니다. 파이썬 2를 사용하는 경우, 발전기를 얻으려면 itertools.izip을 사용해야합니다. 파이썬 3에서는 zip을 사용할 수 있습니다.

for row, data in itertools.izip(reader, reader1): 
    x, y = map(float, row[0:2]) 
    print [x,y, data] 

또는, 당신은 또한 다른 독자에 next를 호출 할 수 있습니다

for row in reader: 
    data = next(reader1) 
    ... 
+0

우편 나를 위해 일했다! 감사 . – Hima

+0

@Hima 여러분을 환영합니다. 파이썬 2.x에서 단지'zip'을 사용하면, 두 파일을 동시에 읽고 그 내용을리스트에 저장합니다. 파일이 매우 큰 경우,'izip'을 사용해야합니다. izip은 메모리의 각 파일에서 한 줄만 유지합니다. –

+0

파이썬 2.7을 사용하고 있습니다.하지만 앞으로는 수백만 개의 데이터가 포함 된 대용량 파일을 다루려고합니다. 따라서 itertools.izip은 나에게 차이를 줄 것입니다. 지금부터 사용하는 것이 좋습니다. zip의 경우 "파일을 한 번에 읽음"이란 무엇을 의미합니까? itertator 권리를 itertools.izip이 반환하는 동안 줄 단위로 읽고 목록을 반환합니다. – Hima

관련 문제