【发布时间】:2015-01-07 15:15:10
【问题描述】:
我正在尝试读取 THIS 文件,其中包含一些奇怪的字符。在记事本++中打开文件会导致它们被“子”字符替换
文件内容为:
>>> open('test.txt', 'rb').read()
b'the first line\r\nsomething something \x06d \x1a Rd<br>+ \x1a Rd;;\x06d \x1a Rd<br>+ \x1a\r\nthe third line\r\neverything\r\nafter\r\nthe\r\nfourth\r\nline'
我正在使用带有简单代码的 Python
with open('test.txt') as f:
for line in f:
print line
这会导致程序完全忽略第一个子字符之后的所有内容。它根本不会打印出第三行和任何其他行。
我现在的问题有两个:
- 文件中的未知字符到底是什么?
- 用这些奇怪的字符读取文件的最佳方法是什么?
编辑:
据我了解,问题来自字符\x1a,根据this question,即“文件结尾字符”。这就解释了python在遇到文件时只是停止读取文件的事实,这意味着我现在的问题是:
如何使用 Python 读取中间包含转义字符 U+001A 的文件,而 Python 不会将其解释为文件结尾?
【问题讨论】:
-
请将文件数据放在这里。可以使用
print repr(f.read()[:100])提供样本。即便如此,guess-the-codec 也不是适合 Stack Overflow 帖子的游戏。而且我肯定不会下载外部托管的随机文件,网站要求我在访问之前输入电子邮件地址。 -
这个文件是不是碰巧从windows环境转到linux环境的?
-
@MartijnPieters f.read() 在未知字符后停止读取文件。我无法以任何可读的方式复制该文件。
-
@MartijnPieters 我在这里使用了meta.stackexchange.com/questions/4637/… 建议的文件上传网站之一。如果您对我如何传达文件有更好的建议,请告诉我...
-
@user2097159 不,文件已制作并在 Windows 中读取。据我所知,它是一个 UTF-8 文件。