2012-07-11 2 views
1

그래서 내가 서버에서 이러한 파일이 다음 토큰 값을 캡처하는 방법이있다 :는 pharse을 찾아

COADREAD ATF7 Missense_Mutation NGXA-AZ-3984 P17544의 A436T을

COADREAD ATG10 Missense_Mutation NGXA-AB -A010 Q9H0Y0 H133N

내 목표는 파일의 5 열에서 캡처/저장 (그 번호를 나중에 인쇄해야 함) 436 인 토큰의 번호 (P17544)를 찾는 것입니다. 이 숫자는 6 열의 A436T에서 두 글자 사이에있는 것으로 가정합니다. 내가 할 수있는 방법이 있습니까? 이전에 lxml로 약간 작업했지만 어떻게해야할지 아직 확신하지 못했습니다. 여기

사전

에 감사 내가

파일 = 개방 ('text.txt', 'R')

조회가 무엇인가 = {} 파일의 라인

:

myid, token = file.rsplit(' ', 2)[1:] 

token = token[1:-1] 
+0

이 인코딩 유형의 이름은 무엇입니까? –

+0

@ K.Brafford 그냥 일반 텍스트 파일 –

+0

@ChadD, 아마 ASCII 그럼? – TankorSmash

답변

2

간단한 방법 내장 str 방법 :

d = 'COADREAD ATF7 Missense_Mutation NGXA-AZ-3984 P17544 A436T' 
myid, token = d.rsplit(' ', 2)[1:] # will except if can't be unpacked so you know you've got exactly 2 elements... 
token = token[1:-1] 

두 문자 사이의 숫자를 지정하고 싶었 경우하지만 당신은 정규 표현식을 사용할 수 있습니다 ... re.match('[A-Z](\d{3})[A-Z]', token[1]) # or similar...

대한 설명 :

d.rsplit(' ', 2) - ['COADREAD ATF7 Missense_Mutation NGXA-AZ-3984', 'P17544', 'A436T'] 을 반환하는 끝에서 ' ' s의 문자열을 분할하기 시작합니다. 마지막 두 요소 만 찾고 있다고 가정하면 슬라이스가있는 첫 번째 요소가 제거되므로 d.rsplit(' ', 2)[1:]이 표시되어 ['P17544', 'A436T']이됩니다.

압축 풀기를 사용하여 변수 이름을 지정하고 myid, token = d.rsplit(' ', 2)[1:]을 사용하여 길이가 2임을 보장합니다. 정확히 두 요소가 없으면 할당이 실패합니다.

인 자르기를 사용하여 토큰에서 첫 번째 및 마지막 문자를 제거하려는 사용자의 ID는 myid이어야합니다. 그런 다음

: 파일의 라인을 구문 분석 후보고를 들어

: 찾는 약

print myid, token 
# P17544 436 

코멘트

lookup = {} 
for line in file: 
    # do steps above so you have myid, token 
    lookup[myid] = token 

그런 다음 조회를 [ 'P17544'] 것이다 return '436'

희망 사항은 분명합니다 ...

+0

d.rsplit 및 token = token [1 : -1] 다음에 [1 :]이있을 때 무엇을하고 있는지 말해 줄 수 있습니까? 그리고 나는 정규 표현식에 대해 전혀 사전에 알지 못한다. –

+0

표준 문자열 메소드에 대해 확실하지 않다면 절대적으로 필요하지 않으면 정규 표현식을 사용하는 것이 가장 좋다. 나는이 대답을 명확히하려고 노력했습니다. –

+0

@JonClemensts 이것은 명확하지만 예를 들어 P17544 또는 Q9H0Y0과 같은 특정 ID를 찾는 방법을 알지 못합니다. –

0

소리가 아주 쉽게 나옵니다. 공백을 따라 나눠서 - 다섯 번째 필드를 추출하고 ... 여섯 번째 필드의 모든 자릿수를 추출하십시오. 또는 나는 무엇인가 놓치고 있냐? 사용

>>> tokens = "COADREAD ATF7 Missense_Mutation NGXA-AZ-3984 P17544 A436T".split() 
>>> print tokens[4] 
P17544 
>>> print ''.join([c for c in tokens[5] if c.isdigit()]) 
436 
+0

이라는 유사한 텍스트가 여러 줄이 있습니다. ,이 항상 작동 할 것이라고 ... 난 기본적으로 ID를 찾아 다음 두 글자 사이의 숫자에 대한 뒤에 토큰을 봐야 해. –

+0

@ChadD ID는 항상 5 번째 열에 있습니까? 그렇다면 모든 라인에서 작동합니다. 그렇지 않다면 ID가 무엇인지 어떻게 알 수 있습니까? –

+0

예 id는 항상 다섯 번째 열입니다. 하지만 나는 ''.join ([c.isdigit()의 경우 토큰 [c]의 c) 올바른 아이디 번호의 라인에서 숫자를 제공합니다. –