python - পাইথন স্ট্রিং খালি কিনা তা পরীক্ষা করার সবচেয়ে মার্জিত উপায়?




string comparison-operators (15)

আমি হার্ডডকোডিং (সিক) খুঁজে পাচ্ছি "

পরিষ্কার কোড পদ্ধতির

এই কাজ: foo == "" খুব খারাপ অভ্যাস। "" একটি যাদুকর মান। আপনি কখনো যাদুকর মূল্যগুলির বিরুদ্ধে পরীক্ষা করতে পারবেন না (আরো সাধারণভাবে যাদুকর সংখ্যা হিসাবে পরিচিত)

আপনি কি একটি বর্ণনামূলক পরিবর্তনশীল নাম তুলনা করা উচিত।

বর্ণনামূলক পরিবর্তনশীল নাম

কেউ মনে করতে পারে যে "empty_string" একটি বর্ণনামূলক পরিবর্তনশীল নাম। এটা না

আপনি আগে যান এবং empty_string = "" এবং মনে করেন আপনার তুলনা করার জন্য একটি দুর্দান্ত পরিবর্তনশীল নাম আছে। এই "বর্ণনামূলক পরিবর্তনশীল নাম" মানে কি না।

একটি ভাল বর্ণনামূলক পরিবর্তনশীল নাম তার প্রসঙ্গে উপর ভিত্তি করে। আপনি খালি স্ট্রিং কি সম্পর্কে চিন্তা আছে।

  • এটা কোথা থেকে এসেছে.
  • কেন এটা আছে।
  • কেন আপনি এটি পরীক্ষা করতে হবে।

সহজ ফর্ম ক্ষেত্র উদাহরণ

আপনি একটি ফর্ম তৈরি করছেন যেখানে ব্যবহারকারী মান প্রবেশ করতে পারে। আপনি কি ব্যবহারকারী কিছু লিখেছেন কিনা তা পরীক্ষা করতে চান।

একটি ভাল পরিবর্তনশীল নামটি not_filled_in হতে পারে not_filled_in

এই কোড খুব পঠনযোগ্য করে তোলে

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

পুরোপুরি সিএসভি উদাহরণ উদাহরণস্বরূপ

আপনি CSV ফাইলগুলি বিশদ করছেন এবং খালি স্ট্রিংকে None হিসাবে পার্স করাতে চান None

(যেহেতু সিএসভি সম্পূর্ণ টেক্সট ভিত্তিক, এটি পূর্বনির্ধারিত কীওয়ার্ড ব্যবহার করে None প্রতিনিধিত্ব করতে পারে না)

একটি ভাল পরিবর্তনশীল নাম CSV_NONE হতে পারে

এটি কোডটি পরিবর্তন করা সহজ করে এবং আপনার যদি কোনও নতুন CSV ফাইল থাকে তবে এটি অন্য কোন স্ট্রিং সহ ""

if csvfield == CSV_NONE:
    csvfield = None

কোড এই টুকরা সঠিক কিনা সম্পর্কে কোন প্রশ্ন নেই। এটা পরিষ্কার করা উচিত যে এটা কি পরিষ্কার।

এই তুলনা করুন

if csvfield == EMPTY_STRING:
    csvfield = None

এখানে প্রথম প্রশ্ন, খালি স্ট্রিং বিশেষ চিকিত্সা প্রাপ্য কেন?

এটি ভবিষ্যতে কোডারগুলিকে বলবে যে একটি খালি স্ট্রিংকে সর্বদা None হিসাবে বিবেচনা করা উচিত None

এটি কারণ এটি কোড বাস্তবায়ন (যা আমরা আসলে তুলনা করছি) সঙ্গে ব্যবসা যুক্তি (কোন CSV মান None হওয়া উচিত None ) মিশ্রিত করে

দুই মধ্যে উদ্বেগ একটি বিচ্ছেদ হতে হবে।

Python একটি খালি স্ট্রিং পরিবর্তনশীল মত কিছু আছে যেখানে আপনি করতে পারেন ?:

if myString == string.empty:

নির্বিশেষে খালি স্ট্রিং মান চেক করার সবচেয়ে মার্জিত উপায় কি? আমি খালি স্ট্রিং চেক করার জন্য প্রতিবার হার্ড কোডিং খুঁজে পাচ্ছি না।


@ 1290 এ সাড়া দিচ্ছে। দুঃখিত, মন্তব্য ব্লক বিন্যাস করার কোন উপায়। None মানটি খালি স্ট্রিং নয় এবং এটিও নয় (স্থান)। অ্যান্ড্রু ক্লার্কের উত্তর সঠিক if not myString : if not myString । @ সমস্যা থেকে উত্তরটি অ্যাপ্লিকেশন-নির্দিষ্ট এবং 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

স্ট্রিংয়ের প্রত্যাশিত বুল আচরণ ভাঙার সময় @ সমস্যাগুলি পূরণ করে।


আপনি শুধু ব্যবহার করেন

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

আমি stripping আগে uneness পরীক্ষা হবে। এছাড়াও, আমি খালি স্ট্রিং মিথ্যা (বা Falsy) ব্যবহার করা হবে। এই পদ্ধতিটি অ্যাপাচের স্ট্রিংউটিলসিস ব্লক বা গুভার স্ট্রিংস .isNullOrEmpty

স্ট্রিং হয় কিনা তা পরীক্ষা করার জন্য আমি এটি ব্যবহার করবো নাকি খালি বা খালি:

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

এবং, যদি স্ট্রিং কোনও না হয় তবে পরীক্ষার সঠিক বিপরীতে না খালি খালি খালি:

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())

কিভাবে এই সম্পর্কে? সম্ভবত এটি "সবচেয়ে মার্জিত" নয়, তবে এটি বেশ সম্পূর্ণ এবং পরিষ্কার বলে মনে হচ্ছে:

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

খালি বা ফাঁকা স্ট্রিং (সংক্ষিপ্ত উপায়) পরীক্ষা করুন:

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

যখন আপনি লাইনের মাধ্যমে ফাইলটি পড়ছেন এবং নির্ধারণ করতে চান, কোন লাইনটি খালি, তা নিশ্চিত করুন আপনি। .strip() ব্যবহার করবেন কারণ "খালি" লাইনটিতে নতুন লাইন অক্ষর রয়েছে:

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

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

    # your code for non-empty lines

যদি আপনি খালি এবং নল স্ট্রিংগুলির মধ্যে পার্থক্য করতে চান তবে আমি if len(string) ব্যবহার করে পরামর্শ দেব, অন্যথায়, আমি কেবল অন্যের মতো if string ব্যবহার করে পরামর্শ দিই। হোয়াইটস্পেস পূর্ণ স্ট্রিং সম্পর্কে caveat এখনও প্রযোজ্য যদিও, তাই strip ভুলবেন না।


যেমন প্রমত্ত উপরে পোস্ট করেছেন, কিন্তু ভুলের সাথে।

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

সবচেয়ে মার্জিত উপায় সম্ভবত তার সত্য বা মিথ্যাবাদী, যেমন:

if not my_string:

যাইহোক, আপনি সাদা স্থান ফালা করতে চান, কারণ:

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

তবে আপনি সম্ভবত এটিতে কিছুটা স্পষ্ট হওয়া উচিত, যদি না আপনি নিশ্চিত যে এই স্ট্রিংটি কোনও ধরণের যাচাইকরণ পাস করেছে এবং এটি একটি স্ট্রিং যা এইভাবে পরীক্ষা করা যেতে পারে।


হয় নিম্নলিখিত

foo is ''

অথবা এমনকি

empty = ''
foo is empty

PEP 8 থেকে, "প্রোগ্রামিং প্রস্তাবনা" বিভাগে :

ক্রম জন্য, (স্ট্রিং, তালিকা, tuples), ফাঁকা ক্রম মিথ্যা যে সত্য ব্যবহার করুন।

সুতরাং আপনি ব্যবহার করা উচিত:

if not some_string:

বা:

if some_string:

শুধু স্পষ্ট করার জন্য, যদি তারা খালি থাকে না বা একটি বুলিয়ান প্রসঙ্গে False বা True ক্রমানুসারে মূল্যায়ন করা হয়। তারা False বা True সমান নয়


if my_string is '':

আমি লক্ষ্য যে কোনো বিশেষ সমন্বয় লক্ষ্য করেনি। আমি জন্য অনুসন্ধান

is ''

পোস্ট করার পূর্বে উত্তর।

 if my_string is '': print ('My string is EMPTY') # **footnote

আমি মনে করি আসল পোস্টার এইরকম চেষ্টা করার চেষ্টা করছে ... যা কিছু সম্ভব ইংরেজি হিসাবে পড়তে পারে এবং কঠিন প্রোগ্রামিং অনুশীলন অনুসরণ করে।

if my_string is '':
    print('My string is EMPTY')
else:
    print(f'My string is {my_string}')

অক্ষর জন্য অক্ষর আমি এই সমাধান একটি ভাল এক মনে হয়।

আমি উল্লিখিত None আলোচনা মধ্যে প্রবেশ করেছে, তাই যোগ এবং আরও কম্প্যাক্ট আমরা পেতে:

if my_string is '': print('My string is Empty')
elif my_string is None : print('My string.... isn\'t')
else: print(f'My string is {my_string}')

not str(myString)

এই অভিব্যক্তি খালি স্ট্রিং জন্য সত্য। অ-খালি স্ট্রিং, কোনও এবং নন-স্ট্রিং বস্তুগুলি সমস্ত মিথ্যা উত্পাদিত হবে, এমন বস্তুগুলি যা বস্তুগুলি __str__ ওভাররাইড করতে পারে, এই লজিককে মিথ্যাবাদী ফিরিয়ে ফিরিয়ে আনতে।


str = ""
if not str:
   print "Empty String"
if(len(str)==0):
   print "Empty String"






comparison-operators