文字列の変換とフォーマット—Pythonドキュメント

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

文字列の変換とフォーマット

数値変換およびフォーマットされた文字列出力のための関数。

int PyOS_snprintf(char *str, size_t size, const char *format, ...)
フォーマット文字列 format と追加の引数に従って、 size バイト以下を str に出力します。 Unixのマニュアルページ snprintf(3)を参照してください。
int PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)
フォーマット文字列フォーマットと可変引数リスト va に従って、サイズバイト以下を str に出力します。 Unixのマニュアルページ vsnprintf(3)

PyOS_snprintf()および PyOS_vsnprintf()は、標準Cライブラリ関数snprintf()およびvsnprintf()をラップします。 それらの目的は、標準C関数では不可能な、コーナーケースでの一貫した動作を保証することです。

ラッパーは、str[size-1]が戻ったときに常に'\0'であることを保証します。 size バイト(末尾の'\0'を含む)を超えてstrに書き込むことはありません。 どちらの機能でも、str != NULLsize > 0format != NULLが必要です。

プラットフォームにvsnprintf()がなく、切り捨てを回避するために必要なバッファーサイズが size を512バイト以上超える場合、Pythonは Py_FatalError()で異常終了します。

これらの関数の戻り値( rv )は、次のように解釈する必要があります。

  • 0 <= rv < sizeの場合、出力変換は成功し、 rv 文字が str に書き込まれました(str[rv]の末尾の'\0'バイトを除く)。 )。
  • rv >= sizeの場合、出力変換は切り捨てられ、成功するにはrv + 1バイトのバッファーが必要でした。 この場合、str[size-1]'\0'です。
  • rv < 0のとき、「何か悪いことが起こった」。 この場合もstr[size-1]'\0'ですが、残りの str は未定義です。 エラーの正確な原因は、基盤となるプラットフォームによって異なります。

次の関数は、ロケールに依存しない文字列から数値への変換を提供します。

double PyOS_string_to_double(const char *s, char **endptr, PyObject *overflow_exception)

文字列s double に変換し、失敗するとPython例外を発生させます。 受け入れられる文字列のセットは、Pythonの float()コンストラクターによって受け入れられる文字列のセットに対応します。ただし、sの先頭または末尾に空白を含めることはできません。 変換は、現在のロケールに依存しません。

endptrNULLの場合、文字列全体を変換します。 文字列が浮動小数点数の有効な表現でない場合は、 ValueError を発生させ、-1.0を返します。

endptrがNULLでない場合は、できるだけ多くの文字列を変換し、*endptrを最初の変換されていない文字を指すように設定します。 文字列の最初のセグメントが浮動小数点数の有効な表現でない場合は、*endptrを設定して文字列の先頭を指し、ValueErrorを発生させ、-1.0を返します。

sが大きすぎてフロートに格納できない値を表す場合(たとえば、"1e500"は多くのプラットフォームでこのような文字列です)、overflow_exceptionは [ X155X]はPy_HUGE_VAL(適切な符号付き)を返し、例外を設定しません。 それ以外の場合、overflow_exceptionはPython例外オブジェクトを指している必要があります。 その例外を発生させ、-1.0を返します。 どちらの場合も、変換された値の後の最初の文字を指すように*endptrを設定します。

変換中に他のエラー(メモリ不足エラーなど)が発生した場合は、適切なPython例外を設定し、-1.0を返します。

バージョン3.1の新機能。

char *PyOS_double_to_string(double val, char format_code, int precision, int flags, int *ptype)

double val は、提供されている format_codeprecision 、および flags を使用して文字列に変換します。

format_code は、'e''E''f''F''g'、 [のいずれかである必要がありますX95X]または'r''r'の場合、指定された精度は0でなければならず、無視されます。 'r'フォーマットコードは、標準の repr()フォーマットを指定します。

フラグは、ゼロ個以上の値Py_DTSF_SIGNPy_DTSF_ADD_DOT_0、またはPy_DTSF_ALTにすることができます。または、以下を組み合わせて使用します。

  • Py_DTSF_SIGNは、 val が負でない場合でも、返される文字列の前に常に符号文字を付けることを意味します。

  • Py_DTSF_ADD_DOT_0は、返される文字列が整数のように見えないようにすることを意味します。

  • Py_DTSF_ALTは、「代替」フォーマットルールを適用することを意味します。 詳細については、 PyOS_snprintf() '#'指定子のドキュメントを参照してください。

ptypeNULL以外の場合、それが指す値はPy_DTST_FINITEPy_DTST_INFINITE、または [X115Xのいずれかに設定されます。 ]、 val がそれぞれ有限数、無限数、または数ではないことを意味します。

戻り値は、変換された文字列を含む buffer へのポインタ、または変換が失敗した場合はNULLへのポインタです。 呼び出し元は、 PyMem_Free()を呼び出して、返された文字列を解放する責任があります。

バージョン3.1の新機能。

int PyOS_stricmp(const char *s1, const char *s2)
文字列の大文字と小文字を区別しない比較。 この関数は、大文字と小文字を区別しないことを除いて、strcmp()とほぼ同じように機能します。
int PyOS_strnicmp(const char *s1, const char *s2, Py_ssize_t size)
文字列の大文字と小文字を区別しない比較。 この関数は、大文字と小文字を区別しないことを除いて、strncmp()とほぼ同じように機能します。