【问题标题】:weird reading from a file in python从python中的文件读取奇怪
【发布时间】:2022-11-07 20:56:19
【问题描述】:

我正在尝试使用 python 逐行读取文件 该文件是一个日志文件',所以它是一个文本文件,应该可以正常工作 我已经尝试过在日志文件上使用这种方法一次并且它完全有效

file = open(path, 'r')

for line in file:
    print(line)

file.close()

但我收到了一些奇怪的打印,例如

我该如何解决?

我尝试了很多不同的方法来从文件中读取,但这可能是因为文件是一个很长的文件

【问题讨论】:

  • 你检查文件的编码类型了吗?
  • 当您尝试使用参数encoding="utf-8" 时会怎样?
  • 你打开的是什么类型的文件?如果它不是文本,那么这种输出是预期的。文件大小无关紧要
  • 您的脚本适用于文本文件。
  • Python open(path, 'r') 的默认编码取决于您的系统。如果您的文件没有碰巧使用该编码,您可能会遇到问题。您可以使用参数encoding='shift_jisx0213'open 指定所需的编码,或者您需要的任何特定编码。

标签: python


【解决方案1】:

这里没有特定于 Python 的内容。如果你cat 文件也会发生同样的事情。

许多文件根本不是文本文件,将它们打印到终端是没有意义的。您正在查看的是恰好具有字符表示但没有意义的数据。

同样,打印 MP3 文件是没有用的,就像将/usr/bin/chromium 发送到您的扬声器设备非常非常不可能产生任何令人愉快的噪音。

类似地,打印图像文件而不是在图像查看程序中打开它看起来像是难以理解的计算机垃圾。

同样,在非 Office 程序中查看 Office 文档看起来就像是难以理解的计算机垃圾。

同样,在文本编辑器中打开/usr/bin/chromium 二进制文件看起来像是难以理解的计算机垃圾。

如果您想知道一行文本结束并立即在下一行继续的奇数股,那是终端控制字符将光标向下移动一行的结果。还有其他几个控制代码可以做类似的事情。

代码也是数据,反之亦然,这一事实有时很有用。内存或磁盘文件中的单个字节可以包含可打印的字符、数字或操作 CPU 寄存器的指令,或同时包含所有三者。但是,在这里,没有什么有趣的东西可看。

【讨论】:

  • 但奇怪的是,这是一个带有日志扩展名的日志文件
  • 一些工具编写二进制日志文件,扩展名没有提供特别的保证(尽管我通常也希望日志文件是文本,只是出于可用性原因)。
【解决方案2】:

只是想让你们知道是什么原因造成的 这是一个 run.log.gz 但我不认为与规则日志文件有任何区别 但在 python 中,我们使用 szip 组件从这样的文件中读取

import gzip

with gzip.open(run_log_path,'r') as file:

就是这个?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2017-11-16
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多