2013-06-09 3 views
1

이전에 bz2를 사용하여 입력을 압축 해제하려고했습니다. 내가 디코드 싶었 입력은 압축 된 형식으로 이미, 그래서 대화 형 파이썬 콘솔에 입력 형식을 결정 :파이썬 bz2 - 텍스트 대 대화 형 콘솔 (데이터 스트림)

>>> import bz2 
>>> bz2.decompress(input) 

이이 오류없이 잘 작동했다. 나는 HTML 파일에서 텍스트를 추출하려고 할 때 그러나, 나는 다른 결과를 가지고 다음 압축을 해제 : 나는 원래 하나를 구문 분석 문자열을 확인했습니다

file = open("example.html", "r") 
contents = file.read() 
# Insert code to pull out the text, which is of type 'str' 
result = bz2.decompress(parsedString) 

하고, 동일 보인다. 또한, 복사하여 내 .py 파일 (기본적으로 이중 괄호 ""로 묶는)에 압축을 풀고 싶은 문자열을 붙여 넣을 때 잘 작동합니다. 또한 "rb"를 사용하여 .html 파일을 바이너리로 볼 수 있기를 기대하면서 열어 보려했지만, 제대로 작동하지는 못했습니다.

내 질문은 :이 두 문자열의 차이점은 무엇입니까? 그들은 둘 다 'str'유형이므로, 나는 실종 된 기본 차이점이 있다고 가정하고 있습니다. 또한 잘못된 데이터 스트림으로 처리되지 않도록 bh2 콘텐츠를 .html에서 검색하는 방법은 무엇입니까? 어떤 도움을 주셔서 감사합니다. 감사!

+0

저는 실제 코드를 보지 않고 도울 수 있다고 생각합니다. 결과 문자열이 같으면 결과는 동일해야합니다. 문자열을 추출하고 비교하는 것부터 시작하십시오. – kirelagin

+0

korylprince가 아래에 답변했다고 생각합니다. : X 비록 조언을 주셔서 감사합니다. 난 그냥 그들을 비교하고 false를 반환했지만 "형식 (parsedString)"했을 때, 둘 다 'str'을 반환했습니다. – Zhouster

답변

2

내 생각에 html 파일에는 파일 자체의 실제 이진 데이터 대신 데이터의 텍스트 표현이 있습니다. 다음 코드를 살펴 걸릴 예를 들어

:

>>> t = '\x80' 
>>> print t 
>>> '\x80' 

을하지만 내가 내용 \x80 텍스트 파일을 생성하고 할 말 :

with open('file') as f: 
    t = f.read() 
print t 

내가 돌아올 것 :

'\\x80' 

이 경우 eval을 사용하여 원하는 결과를 얻을 수 있습니다.

result = bz2.decompress(eval('"'+parsedString'"')) 

신뢰할 수있는 데이터에 대해서만 수행해야합니다.

+0

korylprince에게 감사합니다. eval() 호출은 완벽하게 작동했습니다. 후속 질문으로 파일이 텍스트 표현과 실제 이진 데이터를 사용하는 시점을 어떻게 확인할 수 있습니까? – Zhouster

+0

파일을 텍스트 편집기 또는 Firefox에서 엽니 다. '''\ x80'''과 같은 것을 보게되면 아마 일반 텍스트 일 ​​것입니다. 이상한 기호가 많이 보일 경우 이진 코드 일 것입니다. 가장 정확한 방법은 ascii를 보여주는 16 진수 편집기를 사용하고 기호 나 텍스트를 사용하는지 확인하는 것입니다. – korylprince