【问题标题】:When I read a file in utf-8 .find() doesn't work当我用 utf-8 读取文件时,.find() 不起作用
【发布时间】:2019-10-31 11:05:22
【问题描述】:

我正在尝试读取此文件(存储在文件“apartadoB.txt”中)

我已经编写了该代码,但它不起作用(没有打印任何内容)

file = open("apartadoB.txt","rb")

for i in file.readlines():

    i = str(i.decode('utf-8','ignore'))

    if i.find('Respuesta') != -1:
        print(i)
 
file.close()

apartadoB.txt:

�� Haciendo ping a 10.3.7.0 con 572 bytes de datos: Respuesta desde 10.3.7.0:字节=572 tiempo=228ms TTL=253

Estad�stcas de ping 第 10.3.7.0 段: Paquetes:enviados = 1,recibidos = 1,perdidos = 0 (0% perdidos),Tiempos aproximados de ida y vuelta en miisegundos: M�nimo = 228ms,M�ximo = 228ms,Media = 228ms

Haciendo ping a 10.4.2.5 con 572 bytes de datos: Respuesta desde 10.4.2.5:字节=572 tiempo=11ms TTL=254

Estad�stcas de ping 第 10.4.2.5 段: Paquetes:enviados = 1,recibidos = 1,perdidos = 0 (0% perdidos),Tiempos aproximados de ida y vuelta en miisegundos: M�nimo = 11ms,M�ximo = 11ms,Media = 11ms

Haciendo ping a 10.3.7.0 con 572 bytes de datos: Respuesta desde 10.3.7.0:字节=572 tiempo=225ms TTL=253

Estad�stcas de ping 第 10.3.7.0 段: Paquetes:enviados = 1,recibidos = 1,perdidos = 0 (0% perdidos),Tiempos aproximados de ida y vuelta en miisegundos: M�nimo = 225ms,M�ximo = 225ms,Media = 225ms

。 . .

【问题讨论】:

  • 此代码适用于我并提供正确的输出。我复制了 apartadoB.txt 的内容并创建了该文件并运行了您的代码。此代码是函数的一部分还是更大的代码片段?如果是,请分享整个函数,因为这部分没有任何错误
  • 好吧,我不知道为什么,但应该是文件错误(apartadoB.txt)。因为我刚刚将内容复制到另一个文本文件中并且我的代码正在运行

标签: python-3.x utf-8


【解决方案1】:

使用以下编码为 UTF-8 的数据转为apartadoB.txt

Haciendo ping a 10.3.7.0 con 572 bytes de datos: Respuesta desde 10.3.7.0: bytes=572 tiempo=228ms TTL=253
Estadísticas de ping para 10.3.7.0: Paquetes: enviados = 1, recibidos = 1, perdidos = 0 (0% perdidos), Tiempos aproximados de ida y vuelta en milisegundos: Mínimo = 228ms, Máximo = 228ms, Media = 228ms
Haciendo ping a 10.4.2.5 con 572 bytes de datos: Respuesta desde 10.4.2.5: bytes=572 tiempo=11ms TTL=254
Estadísticas de ping para 10.4.2.5: Paquetes: enviados = 1, recibidos = 1, perdidos = 0 (0% perdidos), Tiempos aproximados de ida y vuelta en milisegundos: Mínimo = 11ms, Máximo = 11ms, Media = 11ms
Haciendo ping a 10.3.7.0 con 572 bytes de datos: Respuesta desde 10.3.7.0: bytes=572 tiempo=225ms TTL=253
Estadísticas de ping para 10.3.7.0: Paquetes: enviados = 1, recibidos = 1, perdidos = 0 (0% perdidos), Tiempos aproximados de ida y vuelta en milisegundos: Mínimo = 225ms, Máximo = 225ms, Media = 225ms

推荐阅读以下代码:

  • with 自动关闭文件。
  • open 应该是文本模式(默认)并指定编码。
  • 不需要readlines()。直接遍历文件。
  • 行 (i) 将已使用 UTF-8 解码。
  • end='' 因为i 行已经有了换行符。

with open('apartadoB.txt',encoding='utf8') as file:
    for i in file:
        if i.find('Respuesta') != -1:
            print(i)

输出:

Haciendo ping a 10.3.7.0 con 572 bytes de datos: Respuesta desde 10.3.7.0: bytes=572 tiempo=228ms TTL=253
Haciendo ping a 10.4.2.5 con 572 bytes de datos: Respuesta desde 10.4.2.5: bytes=572 tiempo=11ms TTL=254
Haciendo ping a 10.3.7.0 con 572 bytes de datos: Respuesta desde 10.3.7.0: bytes=572 tiempo=225ms TTL=253

【讨论】:

  • 谢谢,但是当我使用您的代码时,我收到以下错误:'utf-8' codec can't decode byte 0xff in position 0: invalid start byte。如果我使用 errors='ignore',我会得到 0 个输出
  • 好吧,我不知道为什么,但应该是文件错误(apartadoB.txt)。因为我刚刚将内容复制到另一个文本文件中并且我的代码正在运行
  • @Veggy 文件必须以 UTF-8 保存。如果它以 FF 开头,则更有可能保存为 UTF-16。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 2012-01-05
相关资源
最近更新 更多