2016-07-01 3 views
1

줄 단위로 파일을 읽고 계산을 한 후 결과를 다른 파일에 저장하는 간단한 함수를 작성했습니다. 그러나 출력 할 때 count 대신 0, 1, 2, 3; 6.21263888889e-05, 0.000141933611111 등이됩니다. 이유가 무엇인지 궁금합니다. 출력의파이썬에서 증분 정수

def CumulativePerSecond(input_file): 
    # Record cumulative battery per second 
    freq = 1000 # number of samples per second 
    output_file = os.path.splitext(input_file)[0] + "_1s" + ".txt" 
    output = open(output_file, 'a+') 
    count = 0 
    for line2 in fileinput.input(input_file): 
    count = count + 1 
    print count 
    if count == freq: 
     output.write(str(line2)) 
     count = 0 
    output.close() 

부품 :

1.87317876361 

1.87321708889 

1.87325520083 

1.87329356889 

1.87333199389 

1.87337076056 

1.87340823167 

1.87344365278 

1.87347473167 

1.87351439528 

1.87354390806 

1.87362505778 
+0

typecasting을 int로 시도 했습니까 (즉,'count = int (count + 1)')? –

+0

또한 생성하는 시리즈에 더 많은 숫자를 게시 할 수 있으며 오류를 생성하는 것에 대한 정보를 조금 더 제공 할 수 있습니다. –

+0

또한 입력에서 1000 번째 데이터 포인트마다 파일을 출력하는 것을 주요 목표로합니다. 그것은 훨씬 더 간단하게 쓰여질 수 있으며 카운트가 전혀 필요하지 않을 수도 있습니다. –

답변

1

내가 응용 프로그램의 세부 사항을 잘 모르겠지만, 나는 목록에 데이터를 보낼 것입니다, 다음 각 1000 데이터를 선택 파이썬의 슬라이스 표기법을 사용 포인트.

다음 스 니펫을 시도해보십시오. 당신이 with 키워드를 사용하는 경우

data = range(100) 
every_tenth = data[::10] 

또한, 당신은 명시 적으로 가까운 파일의 필요성을 제거 할 수 있습니다.

with open(filename) as f: 
    data = f.readlines() 

다음

은 당신의 코드를 재 작성 더 'Pythonically'이다 - 즉, 당신이 조금 얻을 그것으로 바이올린 할 수 있습니다 파이썬은 C. 이상을 제공하는 단축키의 일부를 활용 달리기. 파일을 어떻게 처리하는지 잘 모르겠습니다.

def CumulativePerSecond(filename, freq=1000): 
    data = [] 
    with open(filename) as input_file: 
     data = input_file.readlines() 

    output_file = os.path.splitext(filename)[0] + "_1s.txt" 
    with open(out_filename, 'a+') as output: 
     for line in data[::freq]: 
      output.write(line) 
+1

감사합니다. 작동합니다! – ZigZagZebra

관련 문제