2012-08-30 4 views
3

확장자가없는 파일이 있습니다. 나는 그들에게 준회원 확장을 원한다. 이를 위해 필자는 파이썬 프로그램을 작성하여 파일의 데이터를 읽습니다. 내 의심은 제 3 자 도구를 사용하지 않고 확장자없이 유형을 식별 할 수있는 방법입니다.바이너리 데이터에서 확장자가없는 파일 유형 확인

나는 pdf, doc 및 텍스트 파일 만 식별해야합니다. 다른 유형의 파일은 불가능합니다.

내 서버가

답변

10

파일의 처음 몇 바이트를 읽고 "마법 번호"를 찾을 수 있습니다. 매직 넘버의 Wikipedia page은 PDF 파일이 ASCII %PDF으로 시작하고 doc 파일이 16 진수 D0 CF 11 E0으로 시작한다는 것을 나타냅니다.

많은 표준 마법 번호가 실제로 이진 파일의 시작 부분에 ASCII 텍스트이기 때문에 텍스트 파일을 식별하는 것이 일반적으로 어려울 것입니다. 귀하의 경우에는 PDF, DOC 또는 TXT 이외의 것을 얻을 수 없다는 것을 보장 할 수 있다면 PDF 및 DOC 매직 번호를 확인한 다음 그 중 하나가 아니라면 텍스트로 간주 할 수 있습니다. 그것들의.

+0

나는이 문서를 읽는 동안 ** ** ** ** 어떤 생각을 가지고 있나? – Khaleel

+1

16 진수 D0 CF 11 E0이 문자열로 해석됩니다. (DOC 파일의 매직 번호는 문자열이 아닌 원시 16 진수 바이트이므로 이진 모드로 파일을 읽어야합니다.) – BrenBarn

+0

알았어. 데이터를 읽고 _ord() _를 사용하여 int로 변환 한 다음 16 진수로 변환해야합니까? – Khaleel

5

귀하의 OS가 무엇인지 말씀하지 않으 셨습니다. 그것의 a * nix에 기반한 라이브러리라면 libmagic 주위에 파이썬 래퍼 (ctypes를 사용한다)가있다. libmagic은 내용을 검사하여 확장자가없는 파일을 식별 할 수있는 file 명령과 동일한 기본 메커니즘을 사용한다. 또는 libmagic이 파일 정의를 사용하는 방법을 검토하고 두 기본 파일 형식 (doc, pdf)을 식별하는 방법과 왼쪽에있는 모든 내용이 텍스트 여야 함을 알아 내고 기존 코드를 확장하십시오.

0

PDF 문서는 % PDF 버전 번호로 시작하지만 일부는 완전히 압축되었을 수 있습니다.

관련 문제