2013-04-27 5 views
1

4 열 x 180.000 행의 데이터 파일이 있습니다. 열 3의 값이 특정 간격, 즉 최소값 < 열 3 값 < 최대 값이라는 기준에 따라 새 파일에 저장 될 전체 데이터 행을 선택하고 싶습니다.데이터 행을 선택하는 방법

아이디어가 있습니까?

+0

파이썬에서이 행을 다른 테이블에 삽입하는 SQL 문을 실행할 수 있습니다. 파이썬이 SQL 데이터베이스와 어떻게 통신 할 수 있는지 읽어보십시오. 귀하의 실제 조건 기준은 그 방법으로 명확하게 표현되지 않습니다. – Tim

+0

지금까지 시도한 것은 무엇입니까? 파일은'csv' 모듈에 맞는 형식입니까? –

+1

@Tim :이 파일을 새 파일에 기록해야하는 경우 SQL을 사용할 필요가 없습니다. 어쨌든 * 전체 파일을 읽을 필요가 있습니다. 행별로 필터링하고 일치하는 행을 쓸 수 있습니다. –

답변

3

사용 csv module는 단지 필터링, 읽기 및 쓰기 :

with open(inputfilename, 'rb') as inputfile, open(outputfile, 'wb') as outputfile: 
    reader = csv.reader(inputfile) 
    writer = csv.writer(outputfile) 

    for row in reader: 
     if minval <= int(row[2]) <= maxval: 
      writer.writerow(row) 
+0

이것은 훌륭하게 작동 할 것이지만 그의 데이터 형식이 csv 모듈과 작동하지 않을 수도 있습니다. –

+0

가능성은 있지만, OP가 파일 전체에 걸쳐 4 개의 열을 가지고 있다는 것을 감안할 때 작동 할 가능성이 있습니다. 대답은 대부분의 형식으로 쉽게 조정할 수 있습니다. 그렇지 않으면 나머지 일부의 99 %에 대한 트릭을 수행하는 빠른'.split (..) '이 있습니다. –

+0

사실입니다. csv의 형식에 따라 구분 기호를 추가해야 할 수도 있습니다. 우리는 좀 더 많은 정보를 기다려야 할 것 같아요. –

1

간단한 CSV 읽기/쓰기 수행 할 수 있습니다. Numpy를 사용하여보다 우아하고 벡터화 된 형식으로 행할 수 있으며 행 수가 많기 때문에 Numpy가 훨씬 더 빨라질 수 있습니다.

import numpy as np 
#Load file into a 'MATRIX' 
data=np.loadtxt('name_of_delimited_file.txt') 
# Find indices where the condition is met 
idx_condition_met=(data[:,2] > min) & (data[:,2] < max) 
np.savetxt('output.txt', data[idx_condition_met], delimiter=',') 
관련 문제