1. 程式人生 > >Python去掉字串中的字元,僅保留數字(ValueError: invalid literal for int() with base 10: "b'960")

Python去掉字串中的字元,僅保留數字(ValueError: invalid literal for int() with base 10: "b'960")

博主在執行程式的過程中遇到了如上問題,在此記錄下解決方式和產生這個問題的原因。更新於2019.01.05。

解決方式

首先給出解決方式(即去掉字串中的字元,僅保留數字)。找到報錯的那一行中呼叫了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