2016-08-29 3 views
0

PYTHON 새 파일로 그 후 16 진수 문자열을 저장파이썬 검색,

나는, 텍스트 파일을 열고 45 3F로 시작하는 HEX 패턴을 검색, 다음의 진수를 잡아 싶습니다 예 : 45 4F 5D와 같은 6 개의 16 진수 값을 모두 새 파일에 넣습니다. 나는 또한 그래서 파일이 같이 볼 수 항상 00 00

로 끝나는 것을 알고 : 즐 ~ 즐 sdsfsdf 45 층 08 DF 5D 00 00 dsafasdfsadf 45 층 07 D3 5 층 00 00 xztert

그리고에 넣어해야합니다 다음과 같은 새 파일 : 08 DF 5D 07 D3 5F

어떻게하면됩니까?

나는 시도했다 :

output = open('file.txt','r') 
my_data = output.read() 
print re.findall(r"45 3F[0-9a-fA-F]", my_data) 

하지만에만 인쇄 :

[]

어떤 제안?

+0

YOR 예제 데이터가'3F' 후 공간이, 당신의 정규식 것을 허용하지 않습니다. – glglgl

+0

정규 표현식은 한 문자 만 찾습니다. 당신은 '45 3F ([0-9A-F] {2} [0-9A-F] {2} [0-9A-F] {2}) ''를 사용하고 싶습니다. – poke

+0

이 파일에 바이너리 데이터가 있거나 ASCII (즉, 텍스트 파일)의 16 진수 값입니까? 그것들은 두 가지 다른 것들이기 때문입니다. –

답변

0

가 여기에 완전한 답변 (파이썬 3)입니다 :-) 감사 :

with open('file.txt') as reader: 
    my_data = reader.read() 

matches = re.findall(r"45 3F ([0-9A-F]{2} [0-9A-F]{2} [0-9A-F]{2})", my_data) 
data_to_write = " ".join(matches) 
with open('out.txt', 'w') as writer: 
    writer.write(data_to_write) 

re.findall는 캡처 그룹을 반환, 그래서 '45 층 '을 지울 필요가 없습니다.

파일을 처리 할 때 들여 쓰기가 끝나면 파일 설명자가 해제되도록 with open을 사용하십시오.

동적으로 처음 두 옥텟을 적용하려는 경우 :

search_string = raw_input() 
regex_pattern = search_string.upper() + r" ([0-9A-F]{2} [0-9A-F]{2} [0-9A-F]{2})" 
matches = re.findall(regex_pattern, my_data) 
+0

완벽한, 감사합니다! – Matrilx

+0

안녕하세요, 다시 말하지만 터미널에서 검색/패턴 값을 정의 할 수있는 방법을 알고있는 사람이 누구입니까?이 값을 사용하여 원하는 16 진수를 찾으십시오. 다음과 같이 시도했습니다 : print "원하는 값 앞에 오는 문자열을 logfile에 입력하십시오 :" search_string = raw_input() 다음 : = re.findall (r '(search_string) ([0-9A- 2] [0-9A-F] {2}) ', my_data) 하지만 작동하지 않습니다. 어떤 생각이라도 제발? 감사합니다. – Matrilx

+0

동적 입력에 대한 해답을 편집했습니다. 그것이 당신을 도운다면 대답을 받아 들인 것으로 표시하는 것을 잊지 마십시오 :) – Derorrist