파이썬 객체가 문자열인지 확인하는 방법?
파이썬 객체가 문자열인지 (일반 또는 유니 코드) 어떻게 확인할 수 있습니까?
파이썬 2
isinstance(obj, basestring)
테스트 할 객체에 사용 합니다 obj
.
문서 .
객체 o
가 문자열 유형의 하위 클래스의 문자열 유형 인지 확인하려면
isinstance(o, basestring)
모두 때문에 str
과 unicode
의 서브 클래스입니다 basestring
.
유형 o
이 정확한지 확인하려면 다음을 수행하십시오 str
.
type(o) is str
o
의 인스턴스 str
또는 하위 클래스인지 확인하려면 다음을 수행하십시오 str
.
isinstance(o, str)
유니 코드 문자열에 대한 위 또한 작업 바꿀 경우 str
에 unicode
.
그러나 명시 적 유형 검사를 수행 할 필요는 없습니다. "Duck 타이핑"은 필요에 맞을 수 있습니다. http://docs.python.org/glossary.html#term-duck-typing을 참조 하십시오 .
파이썬 3
Python 3.x에서는 유일한 문자열 유형 (Python 2.x의 의미 체계 포함)과 basestring
같이 더 이상 사용할 수 없습니다 .str
unicode
따라서 Python 3.x의 검사는 다음과 같습니다.
isinstance(obj_to_test, str)
이것은 다음 수정 공식의 2to3
변환 도구 : 변환 basestring
에 str
.
파이썬 2와 3
(교차 호환)
Python 버전 (2.x 대 3.x)에 관계없이 확인하려면 six
( PyPI ) 및 해당 string_types
속성을 사용하십시오.
import six
if isinstance(obj, six.string_types):
print('obj is a string!')
내 six
(아주 가벼운 단일 파일 모듈), 단순히하고있어 이 :
import sys
PY3 = sys.version_info[0] == 3
if PY3:
string_types = str
else:
string_types = basestring
나는 이것보다 더 많은 것을 발견했다 pythonic
.
if type(aObject) is str:
#do your stuff here
pass
유형 오브젝트는 싱글이기 때문에, 있다 는 STR 유형에 개체를 비교 할 수 있습니다
하나는 명시 적 유형 검사 (거기에서 멀리하고자하는 경우 입니다 검사가되는 문자열 프로토콜의 그것에서 멀리 좋은 이유), 아마 가장 안전한 부분 :
str(maybe_string) == maybe_string
그것은, 그것은리스트의-문자열 문자열을 호출하지 않습니다하지으로 반복 반복 가능 또는 반복자를 통해 것이며, 그것은 정확하게 감지 stringlike 문자열로합니다.
물론 단점이 있습니다. 예를 들어 str(maybe_string)
계산이 무거울 수 있습니다. 자주 대답은 에 달려 있습니다.
변수가 어떤 것인지 확인하려면 다음과 같이하십시오.
s='Hello World'
if isinstance(s,str):
#do something here,
isistance의 출력은 부울 True 또는 False 값을 제공하므로 적절하게 조정할 수 있습니다. 다음을 사용하여 값의 예상 약어를 확인할 수 있습니다. type (s) isstance 함수에서 사용할 수 있도록 'str'유형을 반환합니다.
나는 다른 사람들이 언급 한 것처럼 오리 타이핑 스타일로 이것을 다룰 수 있습니다. 문자열이 실제로 문자열인지 어떻게 알 수 있습니까? 글쎄, 분명히 문자열 로 변환 하여!
def myfunc(word):
word = unicode(word)
...
인수가 이미 문자열 또는 유니 코드 유형 인 경우 real_word는 수정되지 않은 값을 보유합니다. 전달 된 객체가 __unicode__
메서드를 구현하는 경우 해당 유니 코드 표현을 얻는 데 사용됩니다. 전달 된 객체를 문자열로 사용할 수없는 경우 unicode
내장에서 예외가 발생합니다.
isinstance(your_object, basestring)
객체가 실제로 문자열 유형이면 True입니다. 'str'은 예약어입니다.
내 사과, 정답은 유니 코드 문자열을 포함하기 위해 'str'대신 'basestring'을 사용하는 것입니다. 다른 응답자 중 한 사람이 위에서 언급했듯이.
빈 문자열로 연결하여 테스트 할 수 있습니다.
def is_string(s):
try:
s += ''
except:
return False
return True
편집 :
이것이 목록과 함께 실패한다고 지적한 후 내 대답을 수정하십시오.
def is_string(s):
return isinstance(s, basestring)
오늘 저녁에 나는 유형 에 대해 점검해야 한다고 생각 하는 상황에 부딪 str
쳤지 만 그렇지 않았다.
문제 해결에 대한 나의 접근 방식은 아마도 많은 상황에서 효과가있을 것이므로이 질문을 읽는 다른 사람들이 관심을 가질 수 있도록 아래에 제공합니다 (Python 3 전용).
# NOTE: fields is an object that COULD be any number of things, including:
# - a single string-like object
# - a string-like object that needs to be converted to a sequence of
# string-like objects at some separator, sep
# - a sequence of string-like objects
def getfields(*fields, sep=' ', validator=lambda f: True):
'''Take a field sequence definition and yield from a validated
field sequence. Accepts a string, a string with separators,
or a sequence of strings'''
if fields:
try:
# single unpack in the case of a single argument
fieldseq, = fields
try:
# convert to string sequence if string
fieldseq = fieldseq.split(sep)
except AttributeError:
# not a string; assume other iterable
pass
except ValueError:
# not a single argument and not a string
fieldseq = fields
invalid_fields = [field for field in fieldseq if not validator(field)]
if invalid_fields:
raise ValueError('One or more field names is invalid:\n'
'{!r}'.format(invalid_fields))
else:
raise ValueError('No fields were provided')
try:
yield from fieldseq
except TypeError as e:
raise ValueError('Single field argument must be a string'
'or an interable') from e
일부 테스트 :
from . import getfields
def test_getfields_novalidation():
result = ['a', 'b']
assert list(getfields('a b')) == result
assert list(getfields('a,b', sep=',')) == result
assert list(getfields('a', 'b')) == result
assert list(getfields(['a', 'b'])) == result
Python 2.x 및 3.x와 함께 작동하는 보너스를 가진 문자열과 같은 멋진 오리 타이핑 접근 방식 :
def is_string(obj):
try:
obj + ''
return True
except TypeError:
return False
wisefish 는 isinstance
접근 방식으로 전환하기 전에 오리 유형과 밀접한 관계 가 있었지만+=
목록과는 다른 의미를 갖습니다 +
.
if type(varA) == str or type(varB) == str:
print 'string involved'
EDX에서-온라인 코스 MITx : 6.00.1x Python을 사용한 컴퓨터 과학 및 프로그래밍 소개
참고 URL : https://stackoverflow.com/questions/1303243/how-to-find-out-if-a-python-object-is-a-string
'Programming' 카테고리의 다른 글
크롬에서 기본 인증 세부 정보를 지우는 방법 (0) | 2020.02.27 |
---|---|
package.json에서 git URL을 사용하는 분기 또는 태그에 의존합니까? (0) | 2020.02.26 |
appcompat-v7 : 21.0.0 ': 주어진 이름과 일치하는 리소스를 찾을 수 없습니다 : attr'android : actionModeShareDrawable ' (0) | 2020.02.26 |
C ++에서 대소 문자를 구분하지 않는 문자열 비교 (0) | 2020.02.26 |
Python으로 작성된 CSV 파일에는 각 행 사이에 빈 줄이 있습니다. (0) | 2020.02.26 |