gpt4 book ai didi

python - 类型错误:需要类似字节的对象,不是 'str',但类型是 'bytes'

转载 作者:行者123 更新时间:2023-12-01 00:44:19 26 4
gpt4 key购买 nike

所以我试图替换字符串中的一些字符,但 python 无法正确识别其类型。任何想法为什么会这样??

...
print(type(word))
word.replace('0', 'O')
...
<class 'bytes'> 

已打印,但我得到:

类型错误:需要类似字节的对象,而不是“str”

<小时/>

因此,我正在对帐单中已识别的文本进行一些文本更正。我在 self.text 变量中有一个已识别的文本,其中有 <str class> .

 def text_correction(self):
'''
Post processing, replace some characters.
'''
self.total = ""
self.date = ""
print(type(self.text)) #return <class 'str'>

lines = self.text.split('\n')
new_string = ""

for line in lines:

line = line.encode("ascii")
new_line = ""

words = line.split()

for word in words:

type_of_word = self.get_type_of_word(word)
print(type(word)) #return <class 'bytes'>
if type_of_word == 0:
word.replace('0', 'O')
word.replace('l', 'I')
...

get_type_of_word 函数只是检查字符是否是大写/小写或数字:

 def get_type_of_word(self, word):
'''
Define type of word.
'''
type_of_word = []
count =0
type_of_word.append(sum(1 for c in word if chr(c).isupper()))
type_of_word.append(sum(1 for c in word if chr(c).islower()))
type_of_word.append(sum(1 for c in word if chr(c).isdigit()))
type_of_word.append(len(word) - sum(type_of_word))

if type_of_word[0] == type_of_word[2] and type_of_word[0] != 0:
return 2
else:
return type_of_word.index(max(type_of_word))

最佳答案

replace()方法,当在 bytes 对象上使用时,也需要 bytes 对象作为参数。

所以代替:

word.replace('0', 'O')

写:

word.replace(b'0', b'O')

但是,如果您正在进行文本处理,我想知道为什么您使用 bytes 对象而不是 str 对象。那么直接在字符串上工作更有意义。因此,请确保 word 的类型为 str 而不是 bytes,然后 word.replace('0', 'O' ) 将按预期工作。为此,您的代码只需要进行两处修改:

  • 删除以下语句:line = line.encode("ascii")
  • get_type_of_word()中只需使用c而不是chr(c)

另请注意,word.replace('0', 'O') 没有任何效果,因为它并没有真正更改单词,而是返回它的(修改后的)副本。所以你应该分配它以产生任何效果,例如word = word.replace('0', 'O').

关于python - 类型错误:需要类似字节的对象,不是 'str',但类型是 'bytes',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57101356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com