【发布时间】:2019-09-29 04:47:35
【问题描述】:
我正在从文本文件中读取行。这些行有两个字段,由特殊字符 <xx> 分隔。
代码:
result = open("myresult"+now.strftime("%d%m%Y-%H%M%S")+".txt","a")
inFile = open("test.txt","r")
x=1
for i in inFile:
print("line",str(x))
print(i)
print(i.split("<xx>",1)[1])
x=x+1
python从大文件中读取时,最后一行是parses is line 2060,之后就显示这个错误:
Traceback (most recent call last):
File "mycode.py", line 11, in <module>
for i in inFile: File "/usr/local/lib/python3.6/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe2 in position 3901:
invalid continuation byte
当我从输入文件test.txt 中提取line 2061 时,我发现了这个字符串:
https://rrr.com<xx>{'Server': 'nginx', 'Date': 'Fri, 19 Apr 2019 06:01:30 GMT', 'Content-Type': 'text/html', 'Transfer-Encoding': 'chunked', 'Set-Cookie': 'btst=1c95019e21634b953d79e9124ec8a40a|127.0.0.1|1555653690|1555653690|0|1|0; path=/; domain=.rrr.com; Expires=Thu, 15 Apr 2027 00:00:00 GMT; HttpOnly; SameSite=Lax;, snkz=127.0.0.1; path=/; Expires=Thu, 15 Apr 2027 00:00:00 GMT', 'Content-Encoding': 'gzip'}
当我尝试将它放在一个单独的文件中并单独解析它时,我没有收到错误。
谁能给我解释一下是什么问题?如何解决问题,让python不会停在这一行?
编辑:
请注意,我有来自不同来源的记录,即它们不遵循我所知道的特定编码。有什么通用的东西可以解决这个问题吗?
编辑:
根据一条评论,我尝试了以下方法。光标在... 之后挂起,直到我按下回车键。
Python 3.6.5 (default, Mar 15 2019, 05:40:52)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> with open("test.txt","rb") as f: print(repr(f.read()[3890:3910]))
...
b"sfer-Encoding': 'chu"
【问题讨论】:
-
@snakecharmerb 更改编码后,它工作但在后面的行停止,其中包含类似:
'جرÙx8aدة اÙx84Ùx85Ùx88جز -
如果您不知道编码,为什么要以文本开头读取文件?内容对您没有意义。如果您只关心数据,请将它们作为字节读取。
-
我可以将它们读取为 ASCII 并忽略任何错误吗?
-
这是来自各种来源的数据,供进一步分析。我只是需要现在阅读它们以便稍后将它们插入数据库。
标签: python python-3.x file utf-8 codec