web-dev-qa-db-ja.com

変数の型が文字列かどうかを調べる方法は?

Pythonの変数の型が文字列かどうかを調べる方法はありますか。

isinstance(x,int);

整数値の場合

605
c_pleaseUpvote

Python 2.xでは、あなたはそうするでしょう

isinstance(s, basestring)

basestringは、 抽象スーパークラスstrunicodeの/です。オブジェクトがstrまたはunicodeのインスタンスであるかどうかをテストするために使用できます。


Python 3.xでは、正しいテストは

isinstance(s, str)

bytesクラスはPython 3では文字列型とは見なされません。

900
Sven Marnach

これは古いトピックですが、Googleで最初に表示されるトピックであり、満足のいく答えが見つからないことを考えると、今後の参考のためにここに残します。

six はすでにこの問題を扱っているPython 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,
208
André Fratelli

Python 3.xまたはPython 2.7.6

if type(x) == str:
43
Texom512

型モジュールは、整数や文字列以上のものをチェックしている場合にも存在します。 http://docs.python.org/library/types.html

14
dicato

できるよ:

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
F. Taylor

以下のより良い答えに基づいて編集してください。 3つの答えについて調べて、ベースストリングのクールさについて調べてください。

昔の答え:Unicode文字列に注意してください。これは、WindowsのすべてのCOM呼び出しなど、いくつかの場所から入手できます。

if isinstance(target, str) or isinstance(target, unicode):
10
Wade Hatler

ユニコードを含むPython 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

9
crizCraig

basestringはPython 3では定義されていないので、この小さなトリックはコードの互換性を保つのに役立つかもしれません:

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

その後、Python 2とPython 3の両方で次のテストを実行できます。

isinstance(myvar, basestring)
9
umläute

他の人からたくさんの良い提案がここで提供されています、しかし私は良いクロスプラットフォーム要約を見ません。以下はPythonプログラムに適したドロップインです。

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)

この関数では、入力がPython 3のstrかPython 2のbasestringかを確認するためにisinstance(object, classinfo)を使用します。

8
duanev

また、変数の型が特定の種類であるかどうかを確認したい場合は、変数の型を既知のオブジェクトの型と比較することもできます。

文字列のためにあなたはこれを使うことができます

type(s) == type('')
8
Daniil Grankin

そう、

変数が文字列かどうかをチェックするためのオプションはたくさんあります。

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

この順序は目的のためです。

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

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

trueを返します

type(a) in [str, unicode]

trueを返します

5
be_good_do_good

ベース文字列を使用しない、Python 2の代替方法:

isinstance(s, (str, unicode))

unicodeは(Python 3では)定義されていないので、それでもPython 3では動作しません。

5
yprez

これらの要件とともに、Python 2とPython 3の両方をサポートするための私の答えは次のとおりです。

  • 最低限のPy2 compatコードでPy3コードで書かれています。
  • 中断することなく、後でPy2 compat codeを削除します。すなわち削除のみを目的としており、Py3コードには変更を加えないでください。
  • 何が達成されようとしているのかを隠す傾向があるので、sixまたは同様のcompatモジュールの使用は避けてください。
  • 潜在的なPy4に対する将来性.

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)
4
Cas

Myvarが文字列かどうかをテストするには、これも使用できます。

if type(myvar) == str
3
Ping

もしあなたが外部のライブラリに依存したくないのであれば、これはPython 2.7以降とPython 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
mPrinC

Pythonで変数の型をチェックするために、あなたはtype functionを使うことができます。例えば出力strを与えるtype('hello')

0
Hetal Rachh

isinstance 関数を使用すると、入力データが string または unicode の形式であることを確認できます。以下の例はあなたが簡単に理解するのを助けるでしょう。

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