반응형
질문
나는 파일 이름으로 사용하려는 문자열이 있으므로, Python을 사용하여 파일 이름으로 허용되지 않는 모든 문자를 제거하고 싶습니다.
나는 엄격하게 유지하고 싶습니다. 따라서 문자, 숫자 및 "_-.() "
와 같은 일부 다른 문자만 유지하려고 합니다. 가장 우아한 솔루션은 무엇인가요?
파일 이름은 여러 운영 체제 (Windows, Linux 및 Mac OS)에서 유효해야 합니다. 이것은 내 라이브러리의 MP3 파일이며, 노래 제목이 파일 이름으로 사용되며, 3 대의 컴퓨터 간에 공유되고 백업됩니다.
답변
아래의 HTML을 한국어로 번역하되, HTML 태그와 영어로 된 태그 내용은 유지하세요.
임의의 텍스트로부터 "slug"을 생성하는 방법을 알아보려면 Django 프레임워크를 확인할 수 있습니다. (그러나 그들의 라이선스를 고려하세요!) 슬러그는 URL 및 파일 이름에 친숙합니다.
Django 텍스트 유틸리티는 아마도 이와 같은 종류의 작업을 위한 금기시되는 표준인 slugify()
함수를 정의합니다. 본질적으로, 그들의 코드는 다음과 같습니다.
import unicodedata
import re
def slugify(value, allow_unicode=False):
"""
Taken from https://github.com/django/django/blob/master/django/utils/text.py
'allow_unicode'가 False이면 ASCII로 변환합니다. 공백이나 반복된 대시를 단일 대시로 변환합니다.
알파벳, 밑줄 또는 하이픈이 아닌 문자를 제거합니다. 소문자로 변환합니다. 또한 선행 및 후행 공백, 대시 및 밑줄을 제거합니다.
"""
value = str(value)
if allow_unicode:
value = unicodedata.normalize('NFKC', value)
else:
value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii')
value = re.sub(r'[^\w\s-]', '', value.lower())
return re.sub(r'[-\s]+', '-', value).strip('-_')
그리고 더 오래된 버전:
def slugify(value):
"""
문자열을 정규화하고 소문자로 변환하며, 알파벳이 아닌 문자를 제거하고 공백을 하이픈으로 변환합니다.
"""
import unicodedata
value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore')
value = unicode(re.sub('[^\w\s-]', '', value).strip().lower())
value = unicode(re.sub('[-\s]+', '-', value))
# ...
return value
더 있지만, 슬러그화에 대한 것이 아니라 이스케이프에 대한 것이므로 제외했습니다.
반응형
댓글