创建包含文本的ndarray时如何让numpy忽略UnicodeEncode错误?
报错原因
你指定dtype='S'时,numpy会默认用ASCII编码将字符串转换为字节序列,而你从PDF提取的文本中包含ASCII编码不支持的特殊Unicode字符(如你遇到的\uf009),因此触发编码错误。
解决方法1:确实需要生成字节类型的numpy数组(对应你原来的dtype='S'需求)
先手动对字符串做编码,编码时指定忽略无法转换的字符,再传入numpy创建数组:
import pdfplumber import numpy as np with pdfplumber.open('C:/Users/hasan/simsani/Invoices/Invoice SB14082021-1.pdf') as pdf: first_page = pdf.pages[0] b = first_page.extract_text() # 手动编码,忽略不可转换的字符,用ascii编码会丢弃所有非ASCII字符 encoded_b = b.encode('ascii', errors='ignore') c = np.array(encoded_b, dtype='S')
如果需要保留中文等非ASCII字符,可以把编码替换为utf-8,不会丢失合法的多字节字符:
encoded_b = b.encode('utf-8', errors='ignore') c = np.array(encoded_b, dtype='S')
解决方法2:不需要字节类型,直接用支持Unicode的字符串数组
不需要指定dtype='S',numpy默认的字符串类型原生支持所有Unicode字符,不会触发编码错误,也不会丢失任何字符,更推荐绝大多数场景使用:
import pdfplumber import numpy as np with pdfplumber.open('C:/Users/hasan/simsani/Invoices/Invoice SB14082021-1.pdf') as pdf: first_page = pdf.pages[0] b = first_page.extract_text() c = np.array(b)
内容的提问来源于stack exchange,提问作者user16777790
相关产品推荐
相关产品推荐

