ভেরিয়েবলের ধরণ স্ট্রিং কিনা তা কীভাবে পরীক্ষা করবেন?


766

পাইথনের কোনও উপায় রয়েছে কি পাইথনের মধ্যে ভেরিয়েবলের প্রকারটি একটি string:

isinstance(x,int);

পূর্ণসংখ্যার মানগুলির জন্য?


11
আপনি অজগর canonical.org/~kragen/isinstance শিখতে থাকলে isinstance এ প্রয়োজনীয় পড়া দরকার ।
তিমি


যেহেতু ইনটগুলি সম্পর্কে সাবধানতা অবলম্বন করুন isinstance(True, int) is True
অ্যালবার্ট তুগুশেভ

isinstance(x,str)পাইথন 3 এ সঠিক (স্ট্র্যান্ড একটি মৌলিক প্রকার)।
মাস্টারকন্ট্রোল প্রোগ্রাম

উত্তর:


1137

পাইথন ২.x এ, আপনি তা করবেন

isinstance(s, basestring)

basestringহয় বিমূর্ত সুপারক্লাস এর strএবং unicode। এটি কোনও বস্তুর উদাহরণ strবা এর উদাহরণ কিনা তা পরীক্ষা করতে ব্যবহার করা যেতে পারে unicode


পাইথন 3.x এ, সঠিক পরীক্ষাটি হয়

isinstance(s, str)

bytesবর্গ পাইথন 3 একটি স্ট্রিং টাইপ বিবেচিত হবে না।


10
@ ইয়্যারিন: না। তবে এতে কিছু যায় আসে না, কারণ পাইথন ৩.x অর্থ পাইথন ২.x এর সাথে সামঞ্জস্যপূর্ণ নয়।
নেটকোডার

2
আমি খুঁজে পেয়েছি যে আইসাইনস্ট্যান্স (গুলি, টিআর) পাই 27 নিয়ে কাজ করে, এটি পরীক্ষিত হয়েছে: পাইথন ২.7.৫ (ডিফল্ট, আগস্ট 25, 2013, 00:04:04) [জিসিসি 4.2.1 সামঞ্জস্যপূর্ণ অ্যাপল এলএলভিএম 5.0 (ঝনঝন-500.0.68]] ডারউইনের উপর
কাকিয়ো

25
@ কাকিয়ো: সমস্যাটি হ'ল এটি unicodeবস্তুগুলি মিস করবে , যা স্ট্রিং হিসাবে বিবেচনা করা উচিত। প্রকার strএবং প্রকার উভয়েরই unicodeসাধারণ বেস শ্রেণি রয়েছে basestringএবং এটিই আপনি যাচাই করতে চান।
সোভেন মারনাচ

7
@ ইয়্যারিন যদি আপনি ২.x থেকে 3.x পর্যন্ত কোনও পোর্ট করছেন তবে আপনি সর্বদা নির্ধারিত করতে পারেন basestring = str
জ্যাক

9
@ অ্যাডাম ই্রিকসন ঠিক কি সাথে সামঞ্জস্য জন্য? পাইথন 3 এর সাথে সামঞ্জস্যের জন্য এটি সহায়ক হয় না, যেহেতু পাইথন 3 তে নেই no unicodeপাইথন 2 এবং 3 এর মধ্যে সামঞ্জস্যের জন্য আমার সুপারিশটি হল "ছয়" লাইব্রেরিটি ব্যবহার করা। (বিশেষত isintance(s, six.string_types)এই ক্ষেত্রে)
সোভেন মার্নাচ

222

আমি জানি এটি একটি পুরানো বিষয়, তবে গুগলে প্রদর্শিত প্রথমটি এবং আমি কোনও উত্তর সন্তোষজনক না পেয়েছি বলে আমি ভবিষ্যতের রেফারেন্সের জন্য এখানে রেখে দেব:

ছয়টি পাইথন 2 এবং 3 সামঞ্জস্যের লাইব্রেরি যা ইতিমধ্যে এই সমস্যাটি কভার করে। তারপরে আপনি এর মতো কিছু করতে পারেন:

import six

if isinstance(value, six.string_types):
    pass # It's a string !!

কোডটি পরিদর্শন করা হচ্ছে, এটিই আপনি খুঁজে পান:

import sys

PY3 = sys.version_info[0] == 3

if PY3:
    string_types = str,
else:
    string_types = basestring,

4
যেমন একটি লাইনারের জন্য :, value_is_string = isinstance(value, str if sys.version_info[0] >= 3 else basestring)যেখানে >=ধরে নেওয়া হয় যে কোনও পরিণাম পাইথন 4+ strস্ট্রিংয়ের জন্য মূল শ্রেণি রাখে keeps
পাই মেরিলিয়ন

63

পাইথন 3.x বা পাইথন 2.7.6 এ

if type(x) == str:

10
আমি "if (টাইপ (x) ইন (স্ট্রিং, ইউনিকোড):" এর কমনীয়তা পছন্দ করি, তবে আমি পাইলিন্টটিকে "ইউনিিডেমেটিক" হিসাবে ফ্ল্যাগ করে দেখছি।
ইউক্রেস

15
প্রকারের সাথে তুলনা ==করা স্পষ্টতই পিইপি 8 দ্বারা নিরুৎসাহিত করা হয় এবং "ইউনিডিয়োম্যাটিক" হিসাবে বিবেচিত হওয়ার পাশাপাশি বেশ কয়েকটি ডাউনসাইড রয়েছে যেমন, এটি সাবক্লাসগুলির উদাহরণগুলি সনাক্ত করে না, এটি strস্ট্রিংগুলিও বিবেচনা করা উচিত। আপনি যদি সত্যিই ধরণের ধরণের জন্য পরীক্ষা করতে চান strএবং সাবক্লাসটি স্পষ্টভাবে বাদ দিতে চান তবে ব্যবহার করুন type(x) is str
সোভেন মারনাচ

17

আপনি করতে পারেন:

var = 1
if type(var) == int:
   print('your variable is an integer')

বা:

var2 = 'this is variable #2'
if type(var2) == str:
    print('your variable is a string')
else:
    print('your variable IS NOT a string')

আশাকরি এটা সাহায্য করবে!


13

আপনি কীট এবং স্ট্রিংয়ের চেয়ে বেশি পরীক্ষা করে দেখলে টাইপ মডিউলটিও বিদ্যমান। http://docs.python.org/library/types.html


5
আরও নির্দিষ্টভাবে types.StringTypes,।
মুসিফিল

2
প্রকারভেদগুলি: স্ট্রিংটাইপগুলি পাইথন 3 :(
ইব্রাহিম

11

নীচে আরও ভাল উত্তরের ভিত্তিতে সম্পাদনা করুন। প্রায় 3 টি উত্তর নীচে যান এবং বেসস্ট্রিংয়ের শীতলতা সম্পর্কে সন্ধান করুন।

পুরানো উত্তর: ইউনিকোড স্ট্রিংগুলি সন্ধান করুন, যা আপনি উইন্ডোজের সমস্ত সিওএম কল সহ বেশ কয়েকটি জায়গা থেকে পেতে পারেন।

if isinstance(target, str) or isinstance(target, unicode):

1
ভালো বল ধরা. বেসস্ট্রিং সম্পর্কে আমি জানতাম না। এটি প্রায় 3 টি পোস্ট নিচে উল্লেখ করা হয়েছে এবং এটি আরও ভাল উত্তর বলে মনে হচ্ছে।
ওয়েড হ্যাটলার

6
isinstance()দ্বিতীয় যুক্তি হিসাবে একটি tuple লাগে । সুতরাং basestringউপস্থিত না থাকলেও আপনি কেবল ব্যবহার করতে পারেন isinstance(target, (str, unicode))
মার্টিজন পিটারস

3
অজগর 3.5.1 সালে, unicodeসংজ্ঞায়িত করা হয় না:NameError: name 'unicode' is not defined
এরিক হু

11

যেহেতু basestringPython3 সংজ্ঞায়িত করা হয় না, এই সামান্য কৌতুক কোড সামঞ্জস্যপূর্ণ করতে সহায়তা করে দিতে পারে:

try: # check whether python knows about 'basestring'
   basestring
except NameError: # no, it doesn't (it's Python3); use 'str' instead
   basestring=str

এর পরে আপনি পাইথন 2 এবং পাইথন 3 উভয়টিতে নিম্নলিখিত পরীক্ষা চালাতে পারেন

isinstance(myvar, basestring)

4
বা আপনি যদি বাইট স্ট্রিংগুলিও ধরতে চান:basestring = (str, bytes)
মার্ক

10

পাইথন 2/3 সহ ইউনিকোড

from __future__ import unicode_literals
from builtins import str  #  pip install future
isinstance('asdf', str)   #  True
isinstance(u'asdf', str)  #  True

http://python-future.org/overview.html


1
অনেক ধন্যবাদ! ইন্টারনেটের চারপাশে কয়েক ডজন বিভিন্ন উত্তর রয়েছে তবে কেবলমাত্র এটিই উত্তম। প্রথম লাইন তোলে type('foo')হচ্ছে unicodeপাইথন 2 ডিফল্টরূপে, এবং দ্বিতীয় এক strদৃষ্টান্ত হচ্ছে unicode। মনে হয় কোডটি পাইথন 2 এবং 3 এ বৈধ করে তোলে আবার ধন্যবাদ!
নারানন

9

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

স্ট্রিংয়ের জন্য আপনি এটি ব্যবহার করতে পারেন

type(s) == type('')

7
পাইথনে চেক টাইপ করার এটি একটি ভয়ঙ্কর, ভয়ানক উপায়। যদি অন্য শ্রেণি থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় str? ইউনিকোড স্ট্রিং সম্পর্কে কী বলা যায়, যা এমনকি str2.x থেকে উত্তরাধিকার সূত্রেও আসে না? isinstance(s, basestring)2.x, বা isinstance(s, str)3.x এ ব্যবহার করুন
জ্যাক

1
@ জ্যাক, দয়া করে প্রশ্ন পড়ুন, এবং আরও লক্ষ্য করুন যে আমি এটি লিখি না যে এটি সবচেয়ে ভাল উপায়, কেবল অন্য একটি উপায়।
ড্যানিল গ্রানকিন

9
এটি 3 কারণে একটি খারাপ ধারণা: isinstance()সাবক্লাসগুলির জন্য অনুমতি দেয় (যা কেবল স্ট্রিংগুলিও বিশেষায়িত), অতিরিক্ত type('')কলটি অনর্থক হয় যখন আপনি কেবল ব্যবহার করতে পারেন strএবং প্রকারগুলি সিঙ্গেলন, তাই type(s) is strআরও কার্যকর পরীক্ষা হতে চলেছে।
মার্টিজন পিটারস

8

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

def isstring(s):
    # if we use Python 3
    if (sys.version_info[0] >= 3):
        return isinstance(s, str)
    # we use Python 2
    return isinstance(s, basestring)

এই ফাংশনে, আমরা isinstance(object, classinfo)আমাদের ইনপুটটি strপাইথন 3 এ বা পাইথন 2 তে একটি কিনা তা দেখতে ব্যবহার করি basestring


1
এটি পাইথন 4 এ সম্ভবত ভাঙ্গবে, >=কমপক্ষে বিবেচনা করুন ।
থাকিস

2
ছয়টি স্ট্রিং_ টাইপ বা সিক্স টেক্সট_ টাইপ পরীক্ষা করার জন্য পরিষ্কার থাকুন
দাওনব

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

@ দুআনেভ আপনি যদি পাইথন 2/3 এর সামঞ্জস্য নিয়ে চিন্তিত হন তবে যাইহোক প্রকল্পে ছয়টি ব্যবহার করা আরও ভাল ধারণা। ছয়টিও একটি একক ফাইল তাই নির্ভরতা গাছ / ফোটা এখানে কোনও সমস্যা নয়।
MoxieBall

7

বেসস্ট্রিং ব্যবহার না করে পাইথন 2 এর বিকল্প উপায়:

isinstance(s, (str, unicode))

তবে এখনও পাইথন 3 এ কাজ করবে না যেহেতু unicodeসংজ্ঞায়িত হয়নি (পাইথন 3 এ)।


7

সুতরাং,

আপনার ভেরিয়েবলটি স্ট্রিং কিনা তা পরীক্ষা করার জন্য আপনার কাছে প্রচুর বিকল্প রয়েছে:

a = "my string"
type(a) == str # first 
a.__class__ == str # second
isinstance(a, str) # third
str(a) == a # forth
type(a) == type('') # fifth

এই আদেশ উদ্দেশ্য জন্য।


5
a = '1000' # also tested for 'abc100', 'a100bc', '100abc'

isinstance(a, str) or isinstance(a, unicode)

সত্য ফিরে

type(a) in [str, unicode]

সত্য ফিরে


পাইথনের ২.7.১২ এর জন্য আমাকে উদ্ধৃতিগুলি সরিয়ে ফেলতে হয়েছিল: টাইপ করুন (ক) [স্ট্রিং, ইউনিকোড]
অ্যাডাম এরিকসন

4

এই প্রয়োজনীয়তাগুলির সাথে পাইথন 2 এবং পাইথন 3 উভয়কে সমর্থন করার জন্য আমার উত্তর এখানে রয়েছে:

  • ন্যূনতম পাই 2 কম্পাট কোড সহ পাই 3 কোডে লিখিত।
  • পরে ব্যত্যয় ছাড়াই পাই 2 কমপ্যাট কোডটি সরান। অর্থাত কেবল মুছে ফেলার জন্য লক্ষ্য, পাই 3 কোডে কোনও পরিবর্তন নেই।
  • ব্যবহার sixবা অনুরূপ কমপ্যাট মডিউলটি এড়িয়ে চলুন কারণ তারা কী অর্জন করার চেষ্টা করছে তা লুকাতে থাকে।
  • সম্ভাব্য পাই 4 এর ভবিষ্যত প্রমাণ।

import sys
PY2 = sys.version_info.major == 2

# Check if string (lenient for byte-strings on Py2):
isinstance('abc', basestring if PY2 else str)

# Check if strictly a string (unicode-string):
isinstance('abc', unicode if PY2 else str)

# Check if either string (unicode-string) or byte-string:
isinstance('abc', basestring if PY2 else (str, bytes))

# Check for byte-string (Py3 and Py2.7):
isinstance('abc', bytes)

1

আপনি যদি বাহ্যিক libs উপর নির্ভর করতে না চান, এটি পাইথন 2.7+ এবং পাইথন 3 ( http://ideone.com/uB4Kdc ) উভয়ের জন্যই কাজ করে :

# your code goes here
s = ["test"];
#s = "test";
isString = False;

if(isinstance(s, str)):
    isString = True;
try:
    if(isinstance(s, basestring)):
        isString = True;
except NameError:
    pass;

if(isString):
    print("String");
else:
    print("Not String");

1

ইনপুট ডেটা ফর্ম্যাট স্ট্রিং বা ইউনিকোডের তা নিশ্চিত করার জন্য আপনি কেবল আইসনস্ট্যান্স ফাংশনটি ব্যবহার করতে পারেন । নীচে উদাহরণগুলি আপনাকে সহজে বুঝতে সাহায্য করবে।

>>> isinstance('my string', str)
True
>>> isinstance(12, str)
False
>>> isinstance('my string', unicode)
False
>>> isinstance(u'my string',  unicode)
True


-6

আমি এটি এইভাবে করি:

if type(x) == type(str()):

4
type(str())বলার খুব চক্রাকার উপায় str। প্রকারগুলি সিঙ্গেলন, তাই type(x) is strআরও কার্যকর। isinstance()পরিবর্তে ব্যবহার করা উচিত, যদি না আপনার সাবক্লাস উপেক্ষা করার খুব ভাল কারণ থাকে str
মার্টিজন পিটারস

যদি টাইপ (এক্স) টি
স্ট্রিং হয়


-13
>>> thing = 'foo'
>>> type(thing).__name__ == 'str' or type(thing).__name__ == 'unicode'
True

2
কোন ক্ষেত্রে আপনি বা type(thing).__name__ == 'str'তার চেয়ে বেশি পছন্দ করবেন ? এছাড়াও পাইথন আধুনিক সংস্করণে অস্তিত্ব নেই। type(thing) == strisinstance(thing, str)unicode
ভলতাঃ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.