[PYTHON] 문자열이 목록의 문자열 중 하나로 끝나는 지 확인하십시오.
PYTHON문자열이 목록의 문자열 중 하나로 끝나는 지 확인하십시오.
다음 코드를 작성하는 비범 한 방법은 무엇입니까?
extensions = ['.mp3','.avi']
file_name = 'test.mp3'
for extension in extensions:
if file_name.endswith(extension):
#do stuff
나는 for 루프의 명시 적 선언을 피할 수 있고 if 조건으로 작성한다는 막연한 기억이있다. 사실입니까?
해결법
-
==============================
1.널리 알려지지는 않았지만 str.endswith도 튜플을 허용합니다. 반복 할 필요가 없습니다.
널리 알려지지는 않았지만 str.endswith도 튜플을 허용합니다. 반복 할 필요가 없습니다.
>>> 'test.mp3'.endswith(('.mp3', '.avi')) True
-
==============================
2.그냥 사용 :
그냥 사용 :
if file_name.endswith(tuple(extensions)):
-
==============================
3.파일에서 확장자를 가져 와서 확장자 세트에 있는지 확인하십시오.
파일에서 확장자를 가져 와서 확장자 세트에 있는지 확인하십시오.
>>> import os >>> extensions = set(['.mp3','.avi']) >>> file_name = 'test.mp3' >>> extension = os.path.splitext(file_name)[1] >>> extension in extensions True
집합에서 조회를위한 시간 복잡성이 O (1) (docs)이기 때문에 집합을 사용합니다.
-
==============================
4.정규 표현식과 문자열 (str) 메소드의 두 가지 방법이 있습니다.
정규 표현식과 문자열 (str) 메소드의 두 가지 방법이 있습니다.
문자열 메서드는 일반적으로 더 빠릅니다 (~ 2x).
import re, timeit p = re.compile('.*(.mp3|.avi)$', re.IGNORECASE) file_name = 'test.mp3' print(bool(t.match(file_name)) %timeit bool(t.match(file_name)
루프 당 792 ns ± 1.83 ns (평균 ± 표준 편차 7 회, 각각 1000000 루프)
file_name = 'test.mp3' extensions = ('.mp3','.avi') print(file_name.lower().endswith(extensions)) %timeit file_name.lower().endswith(extensions)
루프 당 274 ns ± 4.22 ns (평균 ± 표준 편차 7 회, 각각 1000000 루프)
-
==============================
5.나는 이것을 가지고있다:
나는 이것을 가지고있다:
def has_extension(filename, extension): ext = "." + extension if filename.endswith(ext): return True else: return False
-
==============================
6.나는 다른 것을 찾고있는 동안 이걸 보았습니다.
나는 다른 것을 찾고있는 동안 이걸 보았습니다.
os 패키지의 메소드를 사용하는 것이 좋습니다. 이는 이상한 경우를 보완하여 더 일반적으로 만들 수 있기 때문입니다.
다음과 같이 할 수 있습니다.
import os the_file = 'aaaa/bbbb/ccc.ddd' extensions_list = ['ddd', 'eee', 'fff'] if os.path.splitext(the_file)[-1] in extensions_list: # Do your thing.
-
==============================
7.또 다른 가능성은 IN 문을 사용하는 것입니다.
또 다른 가능성은 IN 문을 사용하는 것입니다.
extensions = ['.mp3','.avi'] file_name = 'test.mp3' if "." in file_name and file_name[file_name.rindex("."):] in extensions: print(True)
from https://stackoverflow.com/questions/18351951/check-if-string-ends-with-one-of-the-strings-from-a-list by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 모든 목록 요소에서 int () 함수를 호출 하시겠습니까? (0) | 2018.10.10 |
---|---|
[PYTHON] stdin에서 암호 읽기 (0) | 2018.10.10 |
[PYTHON] 파이썬의 분산 형 플롯 및 색상 매핑 (0) | 2018.10.10 |
[PYTHON] 별도의 팬더 데이터 프레임을 서브 그림으로 플로팅하려면 어떻게해야합니까? (0) | 2018.10.10 |
[PYTHON] __file__ 변수는 무엇을 의미합니까 /할까요? (0) | 2018.10.10 |