Pythonは文字列の文字を削除し、数字のみを保持する(ValueError:invalid literal for int()with base 10:「b'960」)
1256 ワード
ブロガーはプログラムを実行する過程で上記の問題に遭遇し、解決方法とこの問題の原因を記録した.2019.01.05に更新されました.
解決策
まず解決策を示します(すなわち、文字列の文字を削除し、数字のみを保持します).エラーが報告された行で
元の文:
次のように変更します.
発生原因
まず、Pythonで
しかし、
ここでブロガーが遭遇したのは、Pythonが出力する際に前のタイプも残している場合です.ここではPythonのいくつかの接頭辞を明確にする必要があります.ここで、
ここで、
このコマンドを使用する場合は、最初に
詳細については、スターディスカッションへようこそ.
解決策
まず解決策を示します(すなわち、文字列の文字を削除し、数字のみを保持します).エラーが報告された行で
int(string)
文が呼び出された場所を見つけ、int(re.sub("\D","",string))
に変更します.つまり、数字以外の文字はすべて削除されます.具体的には、以下の例を参照してください.元の文:
dim_list = [int(dimstr) for dimstr in str(subprocess.check_output([img_size_bin, filename])).split(',')]
次のように変更します.
dim_list = [int(re.sub("\D","",dimstr)) for dimstr in str(subprocess.check_output([img_size_bin, filename])).split(',')]
発生原因
まず、Pythonで
int
でタイプ変換を行うには、変換されたオブジェクトに文字が含まれていないことが要求されます.例えば、次のようになります.int("1234")
>> 1234
しかし、
int("abc1234")
を使うと間違って報告されます(問題など).ここでブロガーが遭遇したのは、Pythonが出力する際に前のタイプも残している場合です.ここではPythonのいくつかの接頭辞を明確にする必要があります.ここで、
b'
という接頭辞はbytesタイプのデータを表す.しかし、ブロガーはこの接頭辞を残すことを望んでいないので、前述した非数値を除去するコマンドを使用しました.re.sub("\D","",string)
ここで、
\D
は非数値(Digit)を表し、後のstringは処理が必要な文字列である.このコマンドを使用する場合は、最初に
re
キットを含める必要があります.import re
詳細については、スターディスカッションへようこそ.