Python

mimetypes — 파일명을 MIME 유형에 매핑

소스 코드: Lib/mimetypes.py


mimetypes 모듈은 파일 이름 또는 URL과 파일 이름 확장자와 연관된 MIME 유형 간의 변환을 수행합니다. 변환은 파일 이름에서 MIME 유형으로, 그리고 MIME 유형에서 파일 이름 확장자로 제공됩니다. 후자의 변환에서는 인코딩이 지원되지 않습니다.

이 모듈은 하나의 클래스와 여러 편리 함수를 제공합니다. 함수가 이 모듈에 대한 일반 인터페이스이지만, 일부 응용 프로그램은 클래스에도 관심이 있을 수 있습니다.

아래에 설명된 함수는 이 모듈의 기본 인터페이스를 제공합니다. 모듈이 초기화되지 않았으면, 함수가 init()가 설정하는 정보에 의존하면 init()를 호출합니다.

mimetypes.guess_type(url, strict=True)

url로 주어진 파일명, 경로 또는 URL에 기반한 파일의 유형을 추측합니다. URL은 문자열이나 경로류 객체일 수 있습니다.

반환 값은 튜플 (type, encoding)인데, type은 MIME content-type 헤더에 사용할 수 있는 'type/subtype' 형식의 문자열이거나, 유형을 추측할 수 없으면 (없거나 알려지지 않은 확장자) None입니다.

encoding*은 인코딩이 없는 경우 ``None``이거나 인코딩에 사용된 프로그램의 이름(예: :program:`compress` 또는 :program:`gzip`)입니다. 이 인코딩은 :mailheader:`Content-Encoding` 헤더로 사용하기에 적합하며, **아닌* Content-Transfer-Encoding 헤더용이 아닙니다. 매핑은 테이블 기반으로 수행됩니다. 인코딩 접미사는 대소 문자를 구분합니다. 유형 접미사는 먼저 대소 문자를 구분하여 시도한 후, 구분하지 않고 시도합니다.

선택적 strict 인자는 알려진 MIME 유형 목록을 IANA에 공식적으로 등록된 유형으로만 제한할지 여부를 결정하는 플래그입니다. 그러나 이 모듈의 동작은 기반이 되는 운영 체제에도 영향을 받습니다. OS에서 인식하거나 파이썬 내부 데이터베이스에 명시적으로 등록된 파일 유형만 식별될 수 있습니다. strictTrue (기본값)인 경우 IANA 유형만 지원하며, strictFalse 인 경우 일부 추가적인 비표준이나 흔히 사용되는 MIME 유형도 인식됩니다.

버전 3.8에서 변경: 경로류 객체 url에 대한 지원이 추가되었습니다.

버전 3.13부터 약하게 폐지 <Soft deprecated>: URL 대신 파일 경로를 전달합니다. 이 경우에는 guess_file_type() 을 사용하십시오.

mimetypes.guess_file_type(path, *, strict=True)

path로 주어진 경로에 기반하여 파일의 유형을 추측합니다. guess_type() 함수와 유사하지만, URL 대신 경로를 받습니다. 경로는 문자열, 바이트열 객체 혹은 경로류 객체일 수 있습니다.

Added in version 3.13.

mimetypes.guess_all_extensions(type, strict=True)

type으로 주어진 MIME 유형을 기반으로 파일의 확장자를 추측합니다. 반환 값은 가능한 모든 파일명 확장자를 제공하는 문자열 리스트인데, 선행 점('.')을 포함합니다. 확장자는 특정 데이터 스트림과 연관되었음이 보장되지는 않지만, guess_type()guess_file_type()에 의해 MIME 유형 type으로 매핑됩니다.

선택적 strict 인자는 guess_type() 함수에서와 같은 의미를 가집니다.

mimetypes.guess_extension(type, strict=True)

type으로 주어진 MIME 유형을 기반으로 파일의 확장자를 추측합니다. 반환 값은 파일명 확장자를 제공하는 문자열인데, 선행 점('.')을 포함합니다. 확장자는 특정 데이터 스트림과 연관되었음이 보장되지는 않지만, guess_type()guess_file_type()에 의해 MIME 유형 type으로 매핑됩니다. type에 대해 추측할 수 있는 확장이 없으면, None이 반환됩니다.

선택적 strict 인자는 guess_type() 함수에서와 같은 의미를 가집니다.

일부 추가 함수와 데이터 항목은 모듈의 동작을 제어하는 데 사용할 수 있습니다.

mimetypes.init(files=None)

내부 데이터 구조를 초기화합니다. 주어지면, files는 기본 유형 맵을 보강하는 데 사용해야 하는 파일 이름의 시퀀스여야 합니다. 생략하면, 사용할 파일 이름은 knownfiles에서 가져옵니다; 윈도우에서는, 현재 레지스트리 설정이 로드됩니다. filesknownfiles에서 명명된 각 파일은 그 앞에서 명명된 파일보다 우선합니다. 반복적으로 init()를 호출할 수 있습니다.

files에 빈 리스트를 지정하면 시스템 기본값이 적용되지 않습니다: 내장 리스트로부터 온 잘 알려진 값만 나타납니다.

filesNone이면 내부 데이터 구조가 초기 기본값으로 완전히 다시 만들어집니다. 이것은 안정적인 연산이며 여러 번 호출 될 때 같은 결과를 생성합니다.

버전 3.2에서 변경: 이전에는, 윈도우 레지스트리 설정이 무시되었습니다.

mimetypes.read_mime_types(filename)

filename 파일이 있으면, 그 파일에 주어진 유형 맵을 로드합니다. 유형 맵은 선행 점('.')을 포함하는 파일명 확장자를 'type/subtype' 형식의 문자열로 매핑하는 딕셔너리로 반환됩니다. filename 파일이 없거나 읽을 수 없으면 None이 반환됩니다.

mimetypes.add_type(type, ext, strict=True)

MIME 유형 type 에서 확장자 ext 로의 매핑을 추가합니다. 확장자가 이미 알려진 경우 새 유형이 기존 유형을 대체합니다. 유형이 이미 알려진 경우 확장자가 알려진 확장 리스트에 추가됩니다. 유효한 확장자는 빈 문자열이거나 '.' 으로 시작하는 문자열입니다.

등록된 소문자 확장자는 대소 문자를 구분하지 않고 매칭됩니다.

strictTrue(기본값)이면, 매핑이 공식 MIME 유형에 추가되고, 그렇지 않으면 비표준 MIME 유형에 추가됩니다.

버전 3.14부터 폐지됨: '.' 으로 시작하지 않는 ext 값은 더 이상 사용되지 않습니다(deprecated).

버전 3.16.0a0 (unreleased)에서 변경: ext 는 이제 반드시 '.' 으로 시작해야 합니다. 그렇지 않으면 ValueError 가 발생합니다.

mimetypes.inited

전역 데이터 구조가 초기화되었는지를 나타내는 플래그. 이것은 init()에 의해 True로 설정됩니다.

mimetypes.knownfiles

일반적으로 설치된 유형 맵 파일 이름의 리스트입니다. 이 파일들은 일반적으로 mime.types로 명명되며 패키지별로 다른 위치에 설치됩니다.

mimetypes.suffix_map

접미사를 접미사에 매핑하는 딕셔너리. 인코딩과 유형이 같은 확장자로 표시되는 인코딩된 파일을 인식하도록 하는 데 사용됩니다. 예를 들어, .tgz 확장자는 인코딩과 유형을 별도로 인식 할 수 있도록, .tar.gz에 매핑됩니다.

mimetypes.encodings_map

파일명 확장자를 인코딩 유형에 매핑하는 딕셔너리.

mimetypes.types_map

파일명 확장자를 MIME 유형에 매핑하는 딕셔너리.

mimetypes.common_types

파일명 확장자를 비표준이지만 일반적으로 발견되는 MIME 유형에 매핑하는 딕셔너리.

모듈의 사용 예:

>>> import mimetypes
>>> mimetypes.init()
>>> mimetypes.knownfiles
['/etc/mime.types', '/etc/httpd/mime.types', ... ]
>>> mimetypes.suffix_map['.tgz']
'.tar.gz'
>>> mimetypes.encodings_map['.gz']
'gzip'
>>> mimetypes.types_map['.tgz']
'application/x-tar-gz'

MimeTypes 객체

MimeTypes 클래스는 하나 이상의 MIME 유형 데이터베이스를 필요로 하는 애플리케이션에서 유용할 수 있으며, mimetypes 모듈과 유사한 인터페이스를 제공합니다.

class mimetypes.MimeTypes(filenames=(), strict=True)

이 클래스는 MIME 유형 데이터베이스를 나타냅니다. 기본적으로, 이 모듈의 나머지 부분과 같은 데이터베이스에 대한 액세스를 제공합니다. 초기 데이터베이스는 모듈이 제공하는 것의 사본이며, read()readfp() 메서드를 사용하여 추가 mime.types-스타일 파일을 데이터베이스에 로드하여 확장할 수 있습니다. 기본 데이터가 필요하지 않으면, 추가 데이터를 로드하기 전에 매핑 딕셔너리를 지울 수도 있습니다.

선택적 filenames 매개 변수는 기본 데이터베이스의 “위”에 추가 파일을 로드하게 하는 데 사용할 수 있습니다.

suffix_map

접미사를 접미사에 매핑하는 딕셔너리. 인코딩과 유형이 같은 확장자로 표시되는 인코딩된 파일을 인식하도록 하는 데 사용됩니다. 예를 들어, .tgz 확장자는 인코딩과 유형을 별도로 인식 할 수 있도록, .tar.gz에 매핑됩니다. 이것은 초기에는 모듈에 정의된 전역 suffix_map의 사본입니다.

encodings_map

파일명 확장자를 인코딩 유형에 매핑하는 딕셔너리. 이것은 초기에는 모듈에 정의된 전역 encodings_map의 사본입니다.

types_map

파일명 확장자를 MIME 유형으로 매핑하는 두 개의 딕셔너리를 포함하는 튜플: 첫 번째 딕셔너리는 비표준 유형 용이고 두 번째는 표준 유형 용입니다. common_typestypes_map으로 초기화됩니다.

types_map_inv

MIME 타입을 파일명 확장자 리스트로 매핑하는 두 개의 딕셔너리를 포함하는 튜플: 첫 번째 딕셔너리는 비표준 유형 용이고 두 번째는 표준 유형 용입니다. common_typestypes_map으로 초기화됩니다.

guess_extension(type, strict=True)

guess_extension() 함수와 유사하고, 객체의 일부로 저장된 테이블을 사용합니다.

guess_type(url, strict=True)

guess_type() 함수와 유사하고, 객체의 일부로 저장된 테이블을 사용합니다.

guess_file_type(path, *, strict=True)

guess_file_type() 함수와 유사하고, 객체의 일부로 저장된 테이블을 사용합니다.

Added in version 3.13.

guess_all_extensions(type, strict=True)

guess_all_extensions() 함수와 유사하고, 객체의 일부로 저장된 테이블을 사용합니다.

read(filename, strict=True)

filename이라는 이름의 파일에서 MIME 정보를 로드합니다. readfp()를 사용하여 파일을 구문 분석합니다.

strictTrue이면, 정보는 표준 유형 리스트에 추가되고, 그렇지 않으면 비표준 유형 리스트에 추가됩니다.

readfp(fp, strict=True)

열린 파일 fp에서 MIME 유형 정보를 로드합니다. 파일은 표준 mime.types 파일의 형식이어야 합니다.

strictTrue이면, 정보는 표준 유형 리스트에 추가되고, 그렇지 않으면 비표준 유형 리스트에 추가됩니다.

read_windows_registry(strict=True)

윈도우 레지스트리에서 MIME 유형 정보를 로드합니다.

가용성: Windows.

strictTrue이면, 정보는 표준 유형 리스트에 추가되고, 그렇지 않으면 비표준 유형 리스트에 추가됩니다.

Added in version 3.2.

add_type(type, ext, strict=True)

MIME 유형 type 에서 확장자 ext 로의 매핑을 추가합니다. 유효한 확장은 ‘.’으로 시작하거나 비어 있어야 합니다. 확장자가 이미 알려진 경우 새 유형이 기존 유형을 대체하며, 유형이 이미 알려진 경우 확장자가 알려진 확장 리스트에 추가됩니다.

등록된 소문자 확장자는 대소 문자를 구분하지 않고 매칭됩니다.

strictTrue(기본값)이면, 매핑이 공식 MIME 유형에 추가되고, 그렇지 않으면 비표준 MIME 유형에 추가됩니다.

버전 3.14부터 폐지됨: '.' 으로 시작하지 않는 ext 값은 더 이상 사용되지 않습니다(deprecated).

버전 3.16.0a0 (unreleased)에서 변경: ext 는 이제 반드시 '.' 으로 시작해야 합니다. 그렇지 않으면 ValueError 가 발생합니다.

명령 줄 사용법

mimetypes 모듈은 명령줄에서 스크립트로 실행할 수 있습니다.

python -m mimetypes [-h] [-e] [-l] type [type ...]

다음 옵션들이 지원됩니다:

-h
--help

도움말 메시지를 표시하고 종료합니다

-e
--extension

유형 대신 확장자를 추측합니다.

-l
--lenient

추가적으로 몇 가지 일반적이지만 비표준인 유형을 검색합니다.

기본적으로 이 스크립트는 MIME 유형을 파일 확장자로 변환합니다. 그러나 --extension 이 지정된 경우, 파일 확장자를 MIME 유형으로 변환합니다.

type 항목에 대해 스크립트는 표준 출력 스트림에 한 줄을 작성합니다. 알 수 없는 유형이 나타나면 표준 출력 스트림에 에러 메시지를 작성하고 종료 코드 1 과 함께 종료합니다.

명령줄 예제

mimetypes 명령줄 인터페이스의 전형적인 사용 사례는 다음과 같습니다:

$ # 파일 이름으로 MIME 유형을 가져옵니다
$ python -m mimetypes filename.png
type: image/png encoding: None

$ # URL로 MIME 유형을 가져옵니다
$ python -m mimetypes https://example.com/filename.txt
type: text/plain encoding: None

$ # 복잡한 MIME 유형을 가져옵니다
$ python -m mimetypes filename.tar.gz
type: application/x-tar encoding: gzip

$ # 희귀한 파일 확장자에 대한 MIME 유형을 가져옵니다
$ python -m mimetypes filename.pict
error: media type unknown for filename.pict

$ # 이제 파이썬에 내장된 확장 데이터베이스에서 찾습니다
$ python -mimetypes --lenient filename.pict
type: image/pict encoding: None

$ # MIME 유형으로 파일 확장자를 가져옵니다
$ python -mimetypes --extension text/javascript
.js

$ # 희귀한 MIME 유형으로 파일 확장자를 가져옵니다
$ python -mimetypes --extension text/xul
error: unknown type text/xul

$ # 다시 확장 데이터베이스에서 찾습니다
$ python -mimetypes --extension --lenient text/xul
.xul

$ # 알 수 없는 파일 확장자를 입력해 봅니다
$ python -mimetypes filename.sh filename.nc filename.xxx filename.txt
type: application/x-sh encoding: None
type: application/x-netcdf encoding: None
error: media type unknown for filename.xxx
type: text/plain encoding: None

$ # 알 수 없는 MIME 유형을 입력해 봅니다
$ python -mimetypes --extension audio/aac audio/opus audio/future audio/x-wav
.aac
.opus
error: unknown type audio/future

분실물 보관소