programing

문자열이 비어 있는지 확인하는 방법

yoursource 2023. 1. 25. 08:55
반응형

문자열이 비어 있는지 확인하는 방법

Python에는 빈 문자열 변수와 같은 기능이 있습니까?

if myString == string.empty:

그래도 빈 문자열 값을 확인하는 가장 우아한 방법은 무엇입니까?어려운 코딩이 발견되다""매번 빈 문자열을 체크하는 것은 좋지 않습니다.

빈 문자열은 "falsy"(python 2 또는 python 3 참조)입니다. 즉, 부울 컨텍스트에서는 false로 간주되므로 다음 작업을 수행할 수 있습니다.

if not myString:

변수가 문자열임을 알고 있는 경우 이 방법을 사용하는 것이 좋습니다.변수가 다른 유형일 수도 있는 경우 다음을 사용해야 합니다.

if myString == "":

부울 컨텍스트에서 false인 다른 값에 대해서는 "True Value Testing" 문서를 참조하십시오.

PEP 8의 "프로그래밍 권장 사항" 섹션에서 다음을 수행합니다.

시퀀스(스트링, 리스트, 튜플)의 경우 빈 시퀀스가 거짓이라는 사실을 사용합니다.

따라서 다음을 사용해야 합니다.

if not some_string:

또는 다음과 같이 입력합니다.

if some_string:

명확히 하기 위해 시퀀스는 다음과 같이 평가됩니다.False ★★★★★★★★★★★★★★★★★」TrueBoolean 컨텍스트에서 비어 있는지 여부를 지정합니다.그들은 동등하지 않다.False ★★★★★★★★★★★★★★★★★」True.

가장 우아한 방법은 아마도 그것이 참인지 거짓인지 확인하는 것입니다. 예를 들어 다음과 같습니다.

if not my_string:

단, 다음과 같은 이유로 공백 공간을 제거할 수 있습니다.

 >>> bool("")
 False
 >>> bool("   ")
 True
 >>> bool("   ".strip())
 False

다만, 이 문자열이 검증에 합격해, 이러한 방법으로 테스트할 수 있는 문자열인 것을 확실히 알고 있지 않는 한, 이 점에 대해서는 조금 더 명확하게 해 둘 필요가 있습니다.

벗겨내기 전에 무정도를 테스트합니다.또한 빈 문자열이 False(또는 Falsy)라는 사실을 사용합니다.이 접근법은 Apache의 StringUtils.isBlank 또는 Guava의 Strings.isNullOrEmpty비슷합니다.

문자열이 [None], [Empty], [Blank] 중 하나인지 테스트하기 위해 사용하는 것은 다음과 같습니다.

def isBlank (myString):
    if myString and myString.strip():
        #myString is not None AND myString is not empty or blank
        return False
    #myString is None OR myString is empty or blank
    return True

문자열이 [None]또는 [Empty]또는 [Blank]가 아닌 경우 테스트와는 정반대입니다.

def isNotBlank (myString):
    if myString and myString.strip():
        #myString is not None AND myString is not empty or blank
        return True
    #myString is None OR myString is empty or blank
    return False

상기 코드의 보다 간결한 형식:

def isBlank (myString):
    return not (myString and myString.strip())

def isNotBlank (myString):
    return bool(myString and myString.strip())

나는 언젠가 Bartek의 답변과 javascript에서 영감을 얻은 것과 비슷한 것을 쓴 적이 있다.

def is_not_blank(s):
    return bool(s and not s.isspace())

테스트:

print is_not_blank("")    # False
print is_not_blank("   ") # False
print is_not_blank("ok")  # True
print is_not_blank(None)  # False

이를 위한 유일한 확실한 방법은 다음과 같습니다.

if "".__eq__(myString):

다른 모든 솔루션에는 문제가 있을 수 있으며 검사가 실패할 수 있는 에지 케이스가 있습니다.

len(myString)==0myString에서 상속되는 클래스의 오브젝트입니다.str 이 위에 덧씌우게 됩니다.__len__()★★★★★★ 。

로, 하 similarly similarlymyString == "" ★★★★★★★★★★★★★★★★★」myString.__eq__("")myString「」를 __eq__() ★★★★★★★★★★★★★★★★★」__ne__().

이유에선지."" == myStringmyString「」를 __eq__().

myString is "" ★★★★★★★★★★★★★★★★★」"" is myString 실패하다myString둘 다 됩니다).False또한 이들은 ID 체크이기 때문에 Python이 동작하는 유일한 이유는 문자열의 인스턴스를 사용하는 String Pooling(String Internment라고도 함)을 사용하기 때문입니다(다음 참조).왜 '==' 또는 'is'를 사용하여 문자열을 비교하면 결과가 달라질있습니까?)그리고.""는 CPythonCPython에서됩니다.

아이덴티티 체크의 큰 문제는 String Internment가 (내가 찾을 수 있는 한) 어떤 문자열이 어떤 문자열이 삽입되어 있는지 표준화되어 있지 않다는 것입니다., 이론상으로는 ,, that that that that ""내연녀

넘어갈 수 밖에 없습니다."".__eq__(myString)으로 「」를 __eq__()의 메서드는 내의 것으로는 수 myString의 합니다.str.

오브젝트를 경우 수 .__bool__()★★★★★★ 。

만 아니라 이 있을 수 있습니다.와 라이브러리가 하위 을 보았기 때문입니다.str 전 및 중myString is ""을 사용법

,, 음, 음, 음, 음, 음, 음, using, using, using, using, using, , using, using, ,is스트링 풀링은 매우 이상한 규칙을 따르기 때문에 때로는 올바르게 동작하지만 다른 경우에는 동작하지 않기 때문에 일반적으로는 꽤 사악한 함정입니다.

즉, 대부분의 경우, 전술한 솔루션은 올바르게 동작합니다.이 포스트는 대부분 학술적인 작업입니다.

빈 문자열 또는 빈 문자열 테스트(짧은 방법):

if myString.strip():
    print("it's not an empty or blank string")
else:
    print("it's an empty or blank string")

과 늘 빈 문자열을 구분하는 것이 .if len(string)않다면 간단하게 하시는 것이 것 같습니다.if string적용되므로잊지 말고 반드시 사용하시기 .strip.

if stringname:gives false문자열이 비어 있는 경우.이보다 더 간단할 순 없을 것 같아.

이건 어때?"가장 우아한" 것은 아니지만, 꽤 완벽하고 명확한 것 같습니다.

if (s is None) or (str(s).strip()==""): // STRING s IS "EMPTY"...

빈 문자열을 체크할 때마다 하드코딩(sic) "을 찾습니다.

클린 코드 어프로치

조작 : ★★★★★★★★★★★★★★★★:foo == ""매우 나쁜 관행입니다. ""마법의 가치입니다.마법의 값(흔히 마법의 숫자로 알려져 있음)과 대조해서는 안 됩니다.

여기서 해야 할 일은 변수 이름을 설명하는 것과 비교하는 것입니다.

기술 변수 이름

"empty_string"은 설명적인 변수 이름이라고 생각할 수 있습니다.그렇지 않아요.

에 ★★★★★★★★★★★★★★★★★★★★★★★★★★」empty_string = ""비교할 수 있는 변수 이름이 있다고 생각합니다.이것은 "기술 변수 이름"의 의미가 아닙니다.

적절한 기술 변수 이름은 해당 컨텍스트를 기반으로 합니다.이 무엇인지 생각해야 합니다.

  • 어디서 오는 거죠?
  • 왜 거기 있지?
  • 왜 그걸 확인해야 하죠?

단순 양식 필드 예제

사용자가 값을 입력할 수 있는 양식을 만들고 있습니다.사용자가 글을 썼는지 확인하려고 합니다.

적절한 변수 이름은 다음과 같습니다.not_filled_in

이것은 코드를 매우 쉽게 읽을 수 있게 합니다.

if formfields.name == not_filled_in:
    raise ValueError("We need your name")

완전한 CSV 해석 예시

빈 을 CSV로 .None

에 (CSV)를 나타낼 수 없습니다.None전에정정정정정키워키용용용용않않않않않않)

적절한 변수 이름은 다음과 같습니다.CSV_NONE

이를 "CSV"를 새로운 이 있는 경우 를 쉽게 및 할 수 .None ""

if csvfield == CSV_NONE:
    csvfield = None

이 코드가 맞는지 여부에 대해서는 질문이 없습니다.그것이 해야 할 일을 하고 있다는 것은 꽤 명백하다.

이것과 비교

if csvfield == EMPTY_STRING:
    csvfield = None

첫 번째 질문은 왜 빈 끈이 특별 대우를 받을 자격이 있는가 하는 것입니다.

에게 빈 이은, should음음음, 음음음음음음음음음 should should should should should should should should should should should should should should should should should should should should should should라고 .None.

이 혼재하기 CSV 은 CSV 이어야 하는가(CSV 값은 CSV 값입니다).None to을 한 경우What we are comparing to')

그 둘 사이에는 우려의 구분이 필요하다.

문자열이 완전히 비어 있는지 확인하고 싶은 경우

if not mystring

빈 문자열이 false이기 때문에 동작하지만 문자열이 공백만 있으면 true가 되므로 원하는 경우

if not mystring.strip()
a = ''
b = '   '
a.isspace() -> False
b.isspace() -> True

@1290입니다.죄송합니다. 댓글로 블록 형식을 지정할 수 없습니다.None값은 Python에서 빈 문자열이 아니며 (스페이스)도 아닙니다. Andrew Clark의 답이다.if not myString@rouble로부터의 답변은 어플리케이션에 따라 다르며 OP의 질문에 답변하지 않습니다.만약 당신이 "빈" 문자열이 무엇인지에 대한 독특한 정의를 채택한다면 당신은 곤경에 처할 것이다.은, 「」, 「」입니다.str(None) 낳다'None'이 아닌 , 「」입니다.

, 반드시 치료해야 None를 '쓰면 더 방법이 .

class weirdstr(str):
    def __new__(cls, content):
        return str.__new__(cls, content if content is not None else '')
    def __nonzero__(self):
        return bool(self.strip())

예:

>>> normal = weirdstr('word')
>>> print normal, bool(normal)
word True

>>> spaces = weirdstr('   ')
>>> print spaces, bool(spaces)
    False

>>> blank = weirdstr('')
>>> print blank, bool(blank)
 False

>>> none = weirdstr(None)
>>> print none, bool(none)
 False

>>> if not spaces:
...     print 'This is a so-called blank string'
... 
This is a so-called blank string

했던 @roouble @roouble 을 합니다.bool스트링의 동작

' , ' , ' , \n' 등의 문자열로 실험을 해봤습니다.변수 foo가 공백이 아닌 문자를 하나 이상 포함하는 문자열인 경우에만 isNotWhitespace를 True로 합니다.Python 3.6을 사용하고 있습니다.결론은 다음과 같습니다.

isWhitespace = str is type(foo) and not foo.strip()
isNotWhitespace = str is type(foo) and not not foo.strip()

필요에 따라서, 이것을 메서드 정의로 랩 합니다.

not str(myString)

이 식은 빈 문자열의 경우 True입니다.문자열이 비어 있지 않은 경우, 문자열이 없는 개체 및 문자열이 아닌 개체는 모두 False를 생성합니다.이 경우 개체는 __str__를 덮어쓰고 false 값을 반환함으로써 이 논리를 방해할 수 있습니다.

을 한 판별할 " "를 하십시오..strip() '행에 이 있기 에 '빈' 행에는 '빈' 행이

lines = open("my_file.log", "r").readlines()

for line in lines:
    if not line.strip():
        continue

    # your code for non-empty lines

Python에서 값 또는 문자열을 할당하는 방법을 볼 수 있습니다.

이것은 비어있는 문자열을 비교하는 것입니다.그래서 빈 공간을 테스트하는 대신not이 빈 할 수 있습니다.""★★★★★★★★★★★★。

apache StringUtils.isBlank 또는 Guava Strings.isNullOrEmpty와 같은 동작을 기대하는 사용자:

if mystring and mystring.strip():
    print "not blank string"
else:
    print "blank string"

그냥 사용하면

not var1 

부울값 둘수.False '':

var1 = ''
not var1
> True

var1 = False
not var1
> True

단, 스크립트에 간단한 조건을 추가하면 다음과 같은 차이가 발생합니다.

var1  = False
not var1 and var1 != ''
> True

var1 = ''
not var1 and var1 != ''
> False

이 정말, 이 문자열인지 아닌지를 사용하는 .isinstance(object, classinfo) 링크도 참조해 주세요.

않는 경우는, 「」를 일람표시합니다.True은 Bool로 도 있습니다.True.

<script type="text/javascript" src="//cdn.datacamp.com/dcl-react.js.gz"></script>

<div data-datacamp-exercise data-lang="python">
  <code data-type="sample-code">
def test_string(my_string):
    if isinstance(my_string, str) and my_string:
      print("It's a me, String! -> " + my_string)
    else: 
      print("Nope. No, String")

def not_fully_test_string(my_string):
    if my_string:
      print("It's a me, String??? -> " + str(my_string))
    else: 
      print("Nope. No, String")
  
print("Testing String:")
test_string("")
test_string(True)
test_string(["string1", "string2"])
test_string("My String")
test_string(" ")

print("\nTesting String or not?")
not_fully_test_string("")
not_fully_test_string(True)
not_fully_test_string(["string1", "string2"])
not_fully_test_string("My String")
not_fully_test_string(" ")

  </code>
</div>

가장 명확한 접근법은 다음과 같습니다.

if s == "":

이점:

  • 에 대한 의 프로그램인지.s래야야한한한한
  • ""''어렵게'가 '어렵게 하다.x == 0일부 값은 기본이며 명명된 상수가 필요하지 않습니다.x % 2짝수인지 확인합니다.
  • 거짓 값을 잘못 표시할 수 없습니다(예:[]는 빈 문자열입니다아아아아아아아아아아아아아아아아아아아아아아아아.

정수가 0인지 어떤지를 확인합니다.

if x == 0:

당연히 해서는 안 된다.

if not x:

정수와 문자열은 모두 원시 값 유형입니다.왜 그들을 다르게 대하나요?

이것이 누군가에게 도움이 되는 경우 목록 목록(python 2)에서 공백 문자열을 N/A로 대체하기 위해 제가 만든 빠른 기능을 소개합니다.

y = [["1","2",""],["1","4",""]]

def replace_blank_strings_in_lists_of_lists(list_of_lists):
    new_list = []
    for one_list in list_of_lists:
        new_one_list = []
        for element in one_list:
            if element:
                new_one_list.append(element)
            else:
                new_one_list.append("N/A")
        new_list.append(new_one_list)
    return new_list


x= replace_blank_strings_in_lists_of_lists(y)
print x

이것은 특정 필드(스키마에서 NN으로 마크된 필드)에 공백이 허용되지 않는 목록 목록을 mysql 데이터베이스에 게시할 때 유용합니다.제 경우 복합 프라이머리 키(composite primary key)가 원인입니다.

아래는 공간 수에 관계없이 우아한 솔루션입니다.

def str_empty(s: str) -> bool:
    """Strip white space and count remaining characters."""
    return len(s.strip()) < 1


>>> str_empty(' ')
True

위에 prmatta가 게시한 것처럼, 하지만 실수가 있었다.

def isNoneOrEmptyOrBlankString (myString):
    if myString:
        if not myString.strip():
            return True
        else:
            return False
    return False

언급URL : https://stackoverflow.com/questions/9573244/how-to-check-if-the-string-is-empty

반응형