2013-11-27 2 views
0

데이터 추출을 완료하는 마지막 날인 Python을 배웠습니다. 나는 어디에도 가지 않고있다 & 당신 중의 1 명은 lovely 한 사람에게 조언 할 수있다.e-prime 출력 (.txt 파일)에서 특정 데이터를 추출하는 방법

다음 데이터를 추출해야합니다 : RESP, CRESP, RTTime 및 RT.

여기 내가 처리해야하는 혼란의 예를 보여줍니다.

생각하십니까?

Level: 4 
     *** LogFrame Start *** 
     Procedure: ActProcScenarios 
     No: 1 
     Line1: It is almost time for your town's spring festival. A friend of yours is 
     Line2: on the committee and asks if you would be prepared to help out with the 
     Line3: barbecue in the park. There is a large barn for use if it rains. 
     Line4: You hope that on that day it will be 
     pfrag: s-n-y 
     pword: sunny 
     pletter: u 
     Quest: Does the town have an autumn festival? 
     Correct: {LEFTARROW} 
     ScenarioListPract: 1 
     Topic: practice 
     Subtheme: practice 
     ActPracScenarios: 1 
     Running: ActPracScenarios 
     ActPracScenarios.Cycle: 1 
     ActPracScenarios.Sample: 1 
     DisplayFragInstr.OnsetDelay: 17 
     DisplayFragInstr.OnsetTime: 98031 
     DisplayFragInstr.DurationError: -999999 
     DisplayFragInstr.RTTime: 103886 
     DisplayFragInstr.ACC: 0 
     DisplayFragInstr.RT: 5855 
     DisplayFragInstr.RESP: {DOWNARROW} 
     DisplayFragInstr.CRESP: 
     FragInput.OnsetDelay: 13 
     FragInput.OnsetTime: 103899 
     FragInput.DurationError: -999999 
     FragInput.RTTime: 104998 
+1

안녕하세요, StackOverflow에 오신 것을 환영합니다. 나는 너의 포스트를 다시 포맷하는 자유를 취했다 -이게 옳은가? 또한이 문제의 어느 부분에 문제가 있는지 알려줄 수 있습니까? 파일 읽기? 올바른 라인을 찾으십니까? 해당 라인에서 관련 가치를 찾는가? 이미 가지고있는 코드를 포함하는 것이 좋으므로 어떤 부품에 작업이 필요한지 보여 줄 수 있습니다 ... –

+0

완벽하고 고맙습니다! 친절하게 제공되는 코드는 무엇인지 이해하지만 구현하는 데 문제가 있습니다. 필자는 분명히 원하는 .txt 파일을 읽어야합니다. ep = open ('t1.txt.') & myfile을 'ep'로 대체하여 코드를 실행해야합니다. 나는 아무것도 빠뜨리지 않기 때문에 비판적으로 중요한 것을 놓치고 있는가? 양해 해 주셔서 감사합니다. – user3042303

+0

접근 방식이 올바른 것 같습니다. 정규식은 콜론 다음에 공백 문자가 있어야한다는 점에서 다소 엄격합니다. 그것이 없으면 (또는 탭 대신) 정규 표현식이 일치하지 않습니다. 아마도'print'를 사용해 파일을 비교 한 후에 그 파일이 정말로 당신이 생각하는 것을 포함하고 있는지 그리고 파이썬이 올바르게 읽었는지 확인하십시오. –

답변

1

은 내가 \bword boundary anchors 당신이 RESP 단지 전체 단어 RESP 아닌 이상 단어 (같은이 CRESP)의 한 부분을 일치하는지 확인 할 수 있기 때문에 정규 표현식 여기에 적합한 도구가 될 것이라고 생각합니다. 당신이 가야이 같은

뭔가 시작 :

>>> import re 
>>> for line in myfile: 
...  match = re.search(r"\b(RT|RTTime|RESP|CRESP): (.*)", line) 
...  if match: 
...   print("Matched {0} with value {1}".format(match.group(1), 
...             match.group(2))) 

출력 :

Matched RTTime with value 103886 
Matched RT with value 5855 
Matched RESP with value {DOWNARROW} 
Matched CRESP with value 
Matched RTTime with value 104998 
1

다음 당신이 원하는대로 DICT에서 항목을 얻을 먼저 DICT로 변환

d = {k.strip(): v.strip() for (k, v) in 
        [line.split(':') for line in s.split('\n') if line.find(':') != -1]} 
print (d['DisplayFragInstr.RESP'], d['DisplayFragInstr.CRESP'], 
     d['DisplayFragInstr.RTTime'], d['DisplayFragInstr.RT']) 

>>> ('{DOWNARROW}', '', '103886', '5855') 
0
import re 
import pprint 


def parse_logs(file_name): 
    with open(file_name, "r") as f: 
     lines = [line.strip() for line in f.readlines()] 

    base_regex = r'^.*{0}: (.*)$' 
    match_terms = ["RESP", "CRESP", "RTTime", "RT"] 

    regexes = {term: base_regex.format(term) for term in match_terms} 

    output_list = [] 
    for line in lines: 
     for key, regex in regexes.items(): 
      match = re.match(regex, line) 
      if match: 
       match_tuple = (key, match.groups()[0]) 
       output_list.append(match_tuple) 
    return output_list 

pprint.pprint(parse_logs("respregex")) 

편집 : 팀과 가이의 대답이 모두 더 좋습니다. 나는 서둘러 뭔가를 쓰려고했고 훨씬 더 우아한 두 가지 해결책을 놓쳤다.

1

나는 너가 필요 이상으로 너 자신을 위해 것을 열심히 만들지도 모른다 것을 나는 생각한다. E-prime은 설명하는 목적으로 설계된 .edat라는 파일 형식을 가지고 있습니다. edat 파일은 .txt 파일과 동일한 정보를 포함하는 다른 형식이지만 변수를 쉽게 추출 할 수있는 방법입니다. 저는 개인적으로 여기에 데이터 저장소 중복 형태로 게시 한 텍스트 파일 형식 만 사용합니다.

소프트웨어 키가 없기 때문에 이런 식으로 작업하는 경우 e-Merge 및 e-DataAid 프로그램에서 키가 필요하지 않음을 알 수 있습니다. 빌드 파일을 편집 할 때만 키가 필요합니다. .txt 파일을 제공 한 사람은이 프로그램의 설치 디스크가 있어야합니다. 그렇지 않은 경우 PST 웹 사이트에서 사용할 수 있습니다 (계정을 만들려면 일련 번호가 필요하지만 확실하지는 않습니다)

Eprime은 일반적으로 게시 한 텍스트 파일의 내용과 일치하는 .edat 파일을 만듭니다. 의 예. 가끔 eprime이 충돌하는 경우 edat 파일을 가져 오지 않고 .txt 만 가질 수 있습니다. 다행히 .txt 파일에서 edat 파일을 생성 할 수 있습니다.

다음은이 문제에 접근하는 방법입니다. edat 파일을 사용할 수없는 경우 먼저 E-DataAid를 사용하여 파일을 복구하십시오.

그런 다음 여러 참가자가있는 경우이 작업을 완료 한 모든 참가자의 모든 edat 파일을 병합하기 위해 e-merge를 사용할 수 있습니다.

병합 된 파일을 엽니 다. 파일에있는 양에 따라 다소 혼란 스러울 수 있습니다. Tools-> Arrange columns로 가면 모든 변수 목록을 볼 수 있습니다. 원하는 변수 만 오른쪽 상자에 있도록 조정하십시오. 오케이.

게시 한 파일을 보면 상단에 레벨 4가 표시되므로이 실험에서 많은 절차가 있다고 생각합니다. 프로그램에 많은 절차가있는 경우이 시점에서 변수 나 관심사가있는 위치에 시작 정보와 NULL 만있는 행이있을 수 있습니다. 이 문제를 해결하려면 도구 -> 필터로 이동하여 필터를 만들어 해당 줄을 제거하십시오. 때로는 파일 구조에 따라 동일한 데이터의 중복 행이 생길 수도 있습니다. 필터링으로이를 수정할 수도 있습니다.

그러면이 파일을 CSV 형식으로 내보낼 수 있습니다.

관련 문제