文字列/バイトオブジェクト—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/c-api/string
移動先:案内検索

文字列/バイトオブジェクト

これらの関数は、文字列パラメーターを予期するときにTypeErrorを発生させ、非文字列パラメーターで呼び出されます。

ノート

これらの関数は、Python3.xでPyBytes_ *に名前が変更されました。 特に明記されていない限り、3.xで使用可能なPyBytes関数は、移植を支援するために同等のPyString_ *にエイリアスされます。


type PyStringObject
PyObject のこのサブタイプは、Python文字列オブジェクトを表します。
PyTypeObject PyString_Type
PyTypeObject のこのインスタンスは、Python文字列型を表します。 Pythonレイヤーのstrおよびtypes.StringTypeと同じオブジェクトです。 .
int PyString_Check(PyObject *o)

オブジェクト o が文字列オブジェクトまたは文字列型のサブタイプのインスタンスである場合、trueを返します。

バージョン2.2で変更:サブタイプの受け入れを許可しました。

int PyString_CheckExact(PyObject *o)

オブジェクト o が文字列オブジェクトであるが、文字列型のサブタイプのインスタンスではない場合、trueを返します。

バージョン2.2の新機能。

PyObject *PyString_FromString(const char *v)
成功した場合は文字列 v のコピーを値として、失敗した場合は NULL を含む新しい文字列オブジェクトを返します。 パラメータ vNULL であってはなりません。 チェックされません。
PyObject *PyString_FromStringAndSize(const char *v, Py_ssize_t len)

成功した場合は文字列 v のコピーを値と長さ len として、失敗した場合は NULL を含む新しい文字列オブジェクトを返します。 vNULL の場合、文字列の内容は初期化されていません。

バージョン2.5で変更:この関数は、 lenintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyString_FromFormat(const char *format, ...)

C printf()スタイルの format 文字列と可変数の引数を取り、結果のPython文字列のサイズを計算し、値がフォーマットされた文字列を返します。 可変引数はCタイプである必要があり、 format 文字列のフォーマット文字に正確に対応している必要があります。 次のフォーマット文字を使用できます。

文字のフォーマット

タイプ

コメント

%%

該当なし

The literal % character.

%c

int

Cintとして表される単一の文字。

%d

int

printf("%d")とまったく同じです。

%u

unsigned int

printf("%u")とまったく同じです。

%ld

長いです

printf("%ld")とまったく同じです。

%lu

unsigned long

printf("%lu")とまったく同じです。

%lld

長い長い

printf("%lld")とまったく同じです。

%llu

unsigned long long

printf("%llu")とまったく同じです。

%zd

Py_ssize_t

printf("%zd")とまったく同じです。

%zu

size_t

printf("%zu")とまったく同じです。

%i

int

printf("%i")とまったく同じです。

%x

int

printf("%x")とまったく同じです。

%s

char *

ヌル終了C文字配列。

%p

空所*

Cポインターの16進表現。 プラットフォームのprintfが何を生成するかに関係なく、リテラル0xで開始することが保証されていることを除いて、printf("%p")とほぼ同等です。

認識されないフォーマット文字により、フォーマット文字列の残りのすべてがそのまま結果文字列にコピーされ、余分な引数は破棄されます。

ノート

“%lld” および“%llu” 形式指定子は、HAVE_LONG_LONGが定義されている場合にのみ使用できます。

バージョン2.7で変更: “%lld” および“%llu” のサポートが追加されました。

PyObject *PyString_FromFormatV(const char *format, va_list vargs)
PyString_FromFormat()と同じですが、2つの引数を取る点が異なります。
Py_ssize_t PyString_Size(PyObject *string)

文字列オブジェクト string の文字列の長さを返します。

バージョン2.5で変更:この関数はintタイプを返しました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

Py_ssize_t PyString_GET_SIZE(PyObject *string)

PyString_Size()のマクロ形式ですが、エラーチェックはありません。

バージョン2.5で変更:このマクロはintタイプを返しました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

char *PyString_AsString(PyObject *string)
string の内容のNUL終了表現を返します。 ポインタは、コピーではなく、文字列の内部バッファを参照します。 文字列がPyString_FromStringAndSize(NULL, size)を使用して作成されたばかりでない限り、データを変更してはなりません。 割り当てを解除してはなりません。 string がUnicodeオブジェクトの場合、この関数は string のデフォルトのエンコーディングを計算し、それを操作します。 string が文字列オブジェクトではない場合、 PyString_AsString()NULL を返し、TypeErrorを発生させます。
char *PyString_AS_STRING(PyObject *string)
PyString_AsString()のマクロ形式ですが、エラーチェックはありません。 文字列オブジェクトのみがサポートされています。 Unicodeオブジェクトは渡さないでください。
int PyString_AsStringAndSize(PyObject *obj, char **buffer, Py_ssize_t *length)

出力変数バッファおよび長さを介して、オブジェクト obj の内容のNUL終了表現を返します。

この関数は、文字列オブジェクトとUnicodeオブジェクトの両方を入力として受け入れます。 Unicodeオブジェクトの場合、オブジェクトのデフォルトのエンコードされたバージョンを返します。 lengthNULL の場合、結果のバッファーにはNUL文字が含まれない可能性があります。 含まれている場合、関数は-1を返し、TypeErrorが発生します。

バッファは、コピーではなく、 obj の内部文字列バッファを参照します。 文字列がPyString_FromStringAndSize(NULL, size)を使用して作成されたばかりでない限り、データを変更してはなりません。 割り当てを解除してはなりません。 string がUnicodeオブジェクトの場合、この関数は string のデフォルトのエンコーディングを計算し、それを操作します。 string が文字列オブジェクトではない場合、 PyString_AsStringAndSize()-1を返し、TypeErrorを発生させます。

バージョン2.5で変更:この関数は、長さint *タイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

void PyString_Concat(PyObject **string, PyObject *newpart)
string に追加された newpart の内容を含む、 * string に新しい文字列オブジェクトを作成します。 呼び出し元は新しい参照を所有します。 string の古い値への参照が盗まれます。 新しい文字列を作成できない場合でも、 string への古い参照は破棄され、 * string の値は NULL に設定されます。 適切な例外が設定されます。
void PyString_ConcatAndDel(PyObject **string, PyObject *newpart)
string に追加された newpart の内容を含む、 * string に新しい文字列オブジェクトを作成します。 このバージョンでは、 newpart の参照カウントが減少します。
int _PyString_Resize(PyObject **string, Py_ssize_t newsize)

「不変」であるにもかかわらず、文字列オブジェクトのサイズを変更する方法。 これは、まったく新しい文字列オブジェクトを作成するためにのみ使用してください。 文字列がコードの他の部分ですでに認識されている可能性がある場合は、これを使用しないでください。 入力文字列オブジェクトのrefcountが1でない場合、この関数を呼び出すとエラーになります。 既存の文字列オブジェクトのアドレスを左辺値(書き込むことができます)として渡し、新しいサイズを希望します。 成功すると、 * string はサイズ変更された文字列オブジェクトを保持し、0が返されます。 * string のアドレスは入力値と異なる場合があります。 再割り当てが失敗した場合、 * string の元の文字列オブジェクトの割り当てが解除され、 * stringNULL に設定され、メモリ例外が設定され、-1が返されます。

バージョン2.5で変更:この関数は、 newsizeintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyString_Format(PyObject *format, PyObject *args)
format および args から新しい文字列オブジェクトを返します。 format % argsに類似しています。 args 引数は、タプルまたはdictである必要があります。
void PyString_InternInPlace(PyObject **string)

引数 * string をインターンします。 引数は、Python文字列オブジェクトを指すポインタ変数のアドレスである必要があります。 * string と同じ既存のインターン文字列がある場合は、 * string を設定します(古い文字列オブジェクトの参照カウントをデクリメントし、インターンされた文字列オブジェクト)、それ以外の場合は、 * string をそのままにして、インターンします(参照カウントをインクリメントします)。 (明確化:参照カウントについては多くの話がありますが、この関数は参照カウントニュートラルと考えてください。呼び出し前にオブジェクトを所有している場合に限り、呼び出し後にオブジェクトを所有します。)

ノート

この関数は3.xでは使用できず、PyBytesエイリアスはありません。

PyObject *PyString_InternFromString(const char *v)

PyString_FromString()PyString_InternInPlace()の組み合わせで、インターンされた新しい文字列オブジェクト、または以前にインターンされた文字列オブジェクトへの新しい(「所有」)参照を返します。同じ値。

ノート

この関数は3.xでは使用できず、PyBytesエイリアスはありません。

PyObject *PyString_Decode(const char *s, Py_ssize_t size, const char *encoding, const char *errors)

encoding に登録されているコーデックを使用して、エンコードされたバッファ ssize バイトをデコードしてオブジェクトを作成します。 encoding および errors は、 unicode()組み込み関数の同じ名前のパラメーターと同じ意味を持ちます。 使用するコーデックは、Pythonコーデックレジストリを使用して検索されます。 コーデックによって例外が発生した場合は、 NULL を返します。

ノート

この関数は3.xでは使用できず、PyBytesエイリアスはありません。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyString_AsDecodedObject(PyObject *str, const char *encoding, const char *errors)

文字列オブジェクトを encoding に登録されているコーデックに渡してデコードし、結果をPythonオブジェクトとして返します。 encoding および errors は、文字列encode()メソッドの同じ名前のパラメーターと同じ意味を持ちます。 使用するコーデックは、Pythonコーデックレジストリを使用して検索されます。 コーデックによって例外が発生した場合は、 NULL を返します。

ノート

この関数は3.xでは使用できず、PyBytesエイリアスはありません。

PyObject *PyString_Encode(const char *s, Py_ssize_t size, const char *encoding, const char *errors)

指定されたサイズのcharバッファーを、 encoding に登録されているコーデックに渡してエンコードし、Pythonオブジェクトを返します。 encoding および errors は、文字列encode()メソッドの同じ名前のパラメーターと同じ意味を持ちます。 使用するコーデックは、Pythonコーデックレジストリを使用して検索されます。 コーデックによって例外が発生した場合は、 NULL を返します。

ノート

この関数は3.xでは使用できず、PyBytesエイリアスはありません。

バージョン2.5で変更:この関数は、サイズintタイプを使用していました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyString_AsEncodedObject(PyObject *str, const char *encoding, const char *errors)

encoding に登録されているコーデックを使用して文字列オブジェクトをエンコードし、結果をPythonオブジェクトとして返します。 encoding および errors は、文字列encode()メソッドの同じ名前のパラメーターと同じ意味を持ちます。 使用するコーデックは、Pythonコーデックレジストリを使用して検索されます。 コーデックによって例外が発生した場合は、 NULL を返します。

ノート

この関数は3.xでは使用できず、PyBytesエイリアスはありません。