【问题标题】:Python string replace not working (bytes input expected?)Python字符串替换不起作用(需要输入字节?)
【发布时间】:2017-05-26 18:11:01
【问题描述】:

我正在尝试将 Pyner (https://github.com/dat/pyner) 用于 NER。我给它一个文本字符串以从中提取命名实体。但我得到一个错误。我附上了出现错误的片段:

for s in ('\f', '\n', '\r', '\t', '\v'): #strip whitespaces
    text = text.replace(s, '')

Error message: {TypeError: a bytes-like object is required, not 'str'}

即使我尝试多种类型的输入(字节对象)也会出现此错误

text = b'This'
text = bytes("This".encode('utf-8'))

我认为问题在于 replace 没有获得正确的输入类型。我正在使用 python 3.5。我究竟做错了什么?请帮忙!

【问题讨论】:

  • 您是否试图仅从开头和结尾删除空格?因为有一个 strip 函数可以做到这一点。如果您要删除所有空格,请注意您缺少空格' '

标签: python string python-3.x replace byte


【解决方案1】:

replacestrbytes 一起使用,但不能同时使用。

你可以这样重写:

for s in (b'\f', b'\n', b'\r', b'\t', b'\v'): #strip whitespaces except space!
    text = text.replace(s, b'')

您也可以申请 stripbytes 一起使用:

text = text.strip()  # remove all of the above + space

也可以:事先转换回str,尝试:

text = str(text)

text = text.decode('utf-8')

(如 Patrick 所述,选择避免修改第三方包的最佳解决方案)

【讨论】:

  • 这对我有用。所以我想包中的代码行应该修改成这样。谢谢!
  • @SashaGreen 这意味着该程序包旨在处理字符串,但您正试图使其处理字节。在进行任何更改之前要非常小心。如果这个包对于你正在做的事情是必要的,你应该尽一切努力改变你的输入而不是别人的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
相关资源
最近更新 更多