2013-09-06 2 views
0

저는 물리학 자로서 프로그래밍 문제로 도움이 필요합니다! 나는 이러한 이벤트가 cells라는 검출기의 특정 지역에서 발생이조작하기위한 특정 문자열 양식 파일 가져 오기

for event in range(100000): 
    ProcessRegion(region, event) 

같은 함수가 호출 될 때마다 이벤트를 위해 많은 이벤트를 포함 된 데이터의 집합 무언가가있다. 각 셀에는 두 개의 채널이 있으며 partition, modulechannel으로 구성된 주소를 사용하여 이벤트가 발생한 정확한 지역을 알 수 있습니다. 4 개의 파티션 (LBA, LBC, EBA, EBC), 64 개의 모듈 및 47 개의 채널이 있습니다. 내가 사용해야하는 추가 데이터를 포함하는 세 개의 긴 파일, 그들은 당신이 파티션과 (EBC64 같은) 모듈 공백과 채널 번호를 볼 수 있도록이

EBC64 41 1 1.
EBC64 42 0 1.000000 
EBC64 42 1 1.000000 
EBC64 43 0 1.000000 
EBC64 43 1 1.000000 
EBC64 44 0 1.000000 
EBC64 44 1 1.000000 
EBC64 45 0 1.000000 
EBC64 45 1 1.000000 
EBC64 46 0 1.000000 
EBC64 46 1 1.000000 
EBC64 47 0 1.000000 
EBC64 47 1 1.000000 

처럼 마지막에 포맷이 사용할 데이터를 열에 배치하십시오. 내 질문은 내가 데이터를 추출하고 사용할 수 있도록 내가이 세 각 파일의 정확한 라인을 얻을 수있는 방법

def ProcessRegion(region, event): 

    partition = region.get_partiotion() 
    module = region.get_module() 
    channel = region.get_channel() 

같은 방법을 사용하고, 내가 읽고 싶은이 같은 세 개의 파일이 분석을 위해서?

편집 : 모호한 질문에 대한

죄송합니다, 나는 그것을 더 잘 설명하려고합니다.

파티션 모듈과 채널이 있으면 각각의 파일에서 데이터를 찾을 수 있습니다. 예를 들어 하나의 이벤트에 대해 파티션 = EBC, 모듈 = 64, 채널 = 41이 있습니다. 이제이 정보를 사용하여 세 가지 다른 파일을 조사하여 데이터를 얻으려는 경우 위의 목록에서이 경우 1.이됩니다. 이것으로 조금 더 명확 해지기를 바랍니다. 그렇지 않으면 다시 작성할 수 있습니다!

+4

넌 있어야 물리학에되며 여전히 귀하의 질문을 이해하지 못합니다. – cerkiewny

+1

이벤트가 범위 (100000)의 숫자이지만 이벤트에 get_partiotion, get_module 및 get_channel을 호출하려고하면 혼란 스럽습니다. 문제가 파일을 열고 읽는 중입니까? 파일의 행을 파티션, 모듈 및 채널로 분할 하시겠습니까? – doctorlove

+0

심각하게 데이터를 변수로 읽는 것이 무엇이 문제입니까? 특정 변수에 대한 파일 검색? 문제를 명확하게 정의하십시오. – cerkiewny

답변

0

사용 :

for line in file: 
    partition_module, channel, _ ,data = line.strip().split() 
    partition = partition_module[:3] 
    module = partition_module[3:] 
+0

'split (None)'형식을 사용하면 –

+0

을 사용할 때'.strip()'이 중복되고 질문을 올바르게 읽은 경우 파티션과 모듈을 공백으로 구분하지 않을 수 있습니다. – doctorlove

+0

@doctorlove 당신은 절대적으로 옳습니다. @JonClements 사실, 'strip()'이 약간 더 직관적이라고 느낍니다. –

0

이 같은 것을보십시오 :

from __future__ import division 

fin = open('data.txt') 
data = fin.readlines() 
fin.close() 

for row in data: 
    partition,module,channel,value = row.split() 
    value = float(value) 
    print partition,module,channel,'value:',value 

아웃 : 내가 제대로 이해한다면

EBC64 41 1 value: 1.
EBC64 42 0 value: 1.0 
EBC64 42 1 value: 1.0 
EBC64 43 0 value: 1.0 
EBC64 43 1 value: 1.0 
EBC64 44 0 value: 1.0 
EBC64 44 1 value: 1.0 
EBC64 45 0 value: 1.0 
EBC64 45 1 value: 1.0 
EBC64 46 0 value: 1.0 
EBC64 46 1 value: 1.0 
EBC64 47 0 value: 1.0 
EBC64 47 1 value: 1.0 
+0

파티션과 모듈은 공백으로 구분됩니까? – doctorlove

1

이 내가 할 것 인 것이다. 내가 zero_one 뭔지 모르겠지만, 그것은 것 같다 0 또는 당신은 단지 기본 파일과 구문 분석 작업에 대한 요구하고있다처럼 소리

for line in lines: 
    partition_module, channel, zero_one, value = line.split() 
    partition = partition_module[:3] 
    module = partition_module[3:] 
1

1. 나는 file.txt를 파일 이름 파일을 열 것인가 세부

f = open("file.txt") 

에서

f = open("file.txt") 
for line in f: 
    event = [x for x in line.split(' ') if x] 
    partition = event[0][:3] 
    module = int(event[0][3:]) 
    channel = int(event[1]) 

같은 일을 할 것입니다. 각 이벤트는 단일 행에 있기 때문에

for line in f: 
파일의 모든 입력 라인을 통해

윌 루프는, 각각의 이벤트는 한 줄의 텍스트가 될 것입니다.

event = filter(None, line.split(' ')) 

공백으로 줄을 나누고 빈 문자열을 모두 제거합니다.

partition = event[0][:3] 

첫 번째 청크의 첫 세 문자 (공백 앞에있는 첫 번째 텍스트 블록)가 파티션이됩니다.

module = int(event[0][3:]) 

첫 번째 청크의 끝에서 네 번째 문자까지 읽은 다음이를 숫자로 해석합니다.

channel = int(event[1]) 

는 전체 2 덩어리를 읽고 숫자로 해석됩니다. 내가 세 번 판독 때문에

나머지 데이터는 다음 (단 1 또는 실시 예 0) 일정 [2] 및 이벤트 [3] (부동 소수점 수)

+0

답변을 주셔서 감사합니다. 문제를 명확히하려고 노력했습니다. – drkg4b

관련 문제