2013-07-19 2 views
6

시간 데이터와 숫자가 포함 된 CSV 파일이 여러 개 있는데,이 방법으로 임계 값 (x) 이하의 숫자가 처음 나타나는 횟수를 반환하는 함수를 작성했습니다.목록에서 숫자의 첫 번째 발생 인덱스를 반환합니다.

것을 제외
def bounce(tickList,x): 
    n = 0 
    for i in tickList: 
     if float(i[1]) < x: 
      return n 
      break 
     n += 1 

때 루프 반송 함수의 실행이 방법 : 그것은 (제 값이 상기 임계 하더라도) 제로 복귀에 유지

for i in os.listdir(resultDir): 

    if "csv" in i: 
     csvFile = resultDir+i 
     print csvFile 
     with open(csvFile, 'rb') as f: 
      reader = csv.reader(f) 
      tickList = [] 
      for line in reader: 
       tickList.append(line) 

     print bounce(tickList,5) 

.

어디로 잘못 가고 있습니까? 사전에

1373289767.454535,9.9 
1373289769.728528,9.9 
1373289771.817576,9.9 
1373289773.813036,11.7 
1373289775.810985,11.7 
1373289777.769641,11.7 
1373289779.783134,12.2 
1373289781.774255,11.8 
1373289783.799892,12.0 
1373289785.812967,11.4 
1373289787.816991,11.4 
1373289789.790835,11.3 
1373289791.811245,10.9 
1373289793.880356,10.8 
1373289795.846866,10.7 
1373289797.847552,10.6 
1373289799.858929,10.6 

감사 : 여기


은 CSV 파일 중 하나의 샘플입니다. 댓글 후

편집 여기

는 새로운 기능입니다 : 내가 플로트를 인쇄하면

def bounce(tickList,x): 
    n = 0 
    for i in tickList: 
     if float(i[1]) < x: 
      return n 
     n += 1 

(전 [1])는 바로 파일을 호출 그래서 오른쪽 숫자를 반환 .

SECOND 편집

문제의 "수준"나는 그것이 사실이었다 먹이를 발견 STR 아닌 INT,보고했고 도움을 모두에게 감사합니다.

+2

제공된 예제의 식별자가 맞는지 확실하지 않지만 'return n'문 다음에 '휴식'이란 무엇입니까? – Ma3x

+1

float (i [1])를 인쇄하면 어떻게됩니까? – Jiminion

+0

예, break 문이 도움이되지 않습니다 ..... – Jiminion

답변

0
def bounce(tickList,x): 
    n = 0 
    for i in tickList: 
     if float(i[1]) < x: 
      return n # return float(i[1) 
      n += 1 
    return None 

???

+0

인덱스를 반환하지 않습니다. 또한 OP가보고있는 오류를 설명하지도 않습니다. –

+0

그는 숫자가 처음 나타나는 것을 원했습니다. 그것은 인덱스처럼 들리지는 않았습니다 (그러나 그의 코드는 분명히 그것을 보여 줬습니다). – Jiminion

+0

OP에있는 것으로 의심되는 들여 쓰기 오류가 발생했습니다. –

1

아래에 임계 값이 필요하다는 것은 슬픈 일이며 그게 바로 당신 코드에있는 것입니다. 그러나 당신이 값 위의 임계 값을 기대하고 난 후에. 변경 bounce() 또는 임계 값 해주 테스트 데이터 :

import csv 

def bounce(tickList,x): 
    n = 0 
    for i in tickList: 
     #print float(i[1]) 
     if float(i[1]) > x: 
      return n 
     n += 1 

csvFile = 'test.csv' 
print csvFile 
tickList = [] 
with open(csvFile, 'rb') as f: 
    reader = csv.reader(f) 
    for line in reader: 
     tickList.append(line) 

print bounce(tickList,5) 

이 코드 인쇄 0.

+0

이 작업을 수행하면 "None"이 반환됩니다. –

+1

오, 나는'with'에서'tickList = []'를 움직였습니다. – twil

2

I 당신의 들여 쓰기가 잘못이며, 같은 공백과 탭을 혼합하여 파이썬이 방법을 해석 강하게 용의자 : n += 1이 결코 외부 루프를 떠난 적이되고

def bounce(tickList,x): 
    n = 0 
    for i in tickList: 
     if float(i[1]) < x: 
      return n 
      break 
    n += 1 

n을 증가시킨다.또한, n += 1 너무 멀리들여 쓰기 수 :

def bounce(tickList,x): 
    n = 0 
    for i in tickList: 
     if float(i[1]) < x: 
      return n 
      break 
      n += 1 

함수가 x 아래 float(i[1])있는 행이 어떤 경우에 0을 반환합니다.

당신은 -tt이 탭과 공간의 일관성 사용보고는 이러한 문제를 발견하면 오류를 높이기 위해 파이썬을 알려줍니다 python -tt scriptname.py, 당신의 스크립트를 실행하여 이러한 문제를 테스트 할 수 있습니다.

당신은 파일 초기를 읽고 enumerate()을 사용하고 테스트를 인라인, 종료하여 코드를 단순화 할 수 있습니다

내부 for 루프가 더 next()와 발전기 식을 사용하여 아래로 단순화 할 수
for fname in os.listdir(resultDir): 
    if "csv" in fname: 
     csvFile = os.path.join(resultDir, fname) 
     print csvFile 
     with open(csvFile, 'rb') as f: 
      reader = csv.reader(f) 
      for i, row in enumerate(reader) 
       if float(row[1]) < 5: 
        print i 
        break # exit for loop, continue with next file 

: resu 일단 반복

with open(csvFile, 'rb') as f: 
    reader = csv.reader(f) 
    print next((i for i, r in enumerate(reader) if float(r[1]) < 5), 'Not found') 

같은 next()정지 발견되었습니다.

reader = enumerate(csv.reader(f)) 
idx, row = next((r for r in reader if float(r[1][1]) < 5), (None, None)) 
+0

사이드 그립 -'-tt'이 기본값이 아닌 이유는 무엇입니까? 파이썬 프로그램에서 탭과 스페이스를 혼합하는 것은 재앙을위한 처방이며 쉽게 피할 수있다. – JoshG79

+0

@ JoshG79 : 조심스럽게 다룰 경우 탭과 스페이스를 섞을 수 있기 때문이다. 하지만 어렵고 까다 롭고 실제로 피해야 할 좋은 IDE가 있더라도. 갑자기 파이썬이 믹싱이 더 이상 허용되지 않는다고 결정했기 때문에 레거시 코드가 깨져서는 안됩니다. –

0

나는 어쩌면 같은 간단한, 당신은 메모리에 전체 데이터가 필요 확신 아니에요.

예상대로 작동합니다 (원래 함수를 편집하여 색인과 요소 값을 모두 반환했습니다).

def bounce(tickList,x): 
    n = 0 
    for i in tickList: 
     if float(i[1]) < x: 
      return (n, i[1]) 
     n += 1 
0

당신이 identation에 공백과 탭을 혼합하여 사용하고 있지 않은지 확인하십시오 :

관련 문제