我对readline()方法有一个问题,它有时返回2行而不是1行,我不知道为什么。有人能帮我吗?在
以下是我阅读的文本文件的一部分(使用记事本):
at+gpsinit=2
OK
+GPSEVINIT: 1
at+gpsnmea=3
OK
at+gpsstart=0
OK
使用记事本++:
^{pr2}$这里是我在Python shell中得到的:
16 : at+gpsinit=2
17 :
18 : OK
19 :
20 : +GPSEVINIT: 1
21 : at+gpsnmea=3
我的代码是:
# Open a file
file = open("testtxt.txt", 'r')
line = 0
for current_line in file:
line += 1
print(str(line)+" : "+current_line)
# Close opend file
file.close()
好的,所以我解决了我的问题,似乎Np给了我错误的文本文件。不管怎样,我用了这个命令:
它给了我很好的台词。在
readline()
例程中肯定没有bug;太多人经常使用它,除非您有一个非常奇怪的实现,它不是标准的Python,否则您也将使用一个不错的版本。在你所提供的信息还不足以确定你的问题是什么原因,但我建议用一些分析方法来找出你正在处理的问题。在
您应该仔细看看行中有什么,哪些字节终止了您的行(}或其他),并特别仔细地观察
'\n'
或{at+gpsinit=2
行及其结尾。在在Unix系统上,您可以使用
od
(或xxd
)来完成此操作。使用选项-c
打印字符。使用-t x1 -t c
也可以获得每个字节的十六进制输出。在您遇到的问题很可能是由于行尾标记的问题。在
CRLF
(或,\r\n
,或{LF
(或\n
,或{CR
(或\r
,或{以下是ASCII编码文件的一些示例:
你可以看到,单词}。在MS记事本中编辑文件时,很可能会插入
hello
(68 65 6c 6c 6f
)后面分别跟着不同的字节0d 0a
、0a
或{CRLF
。由于LF
在软件开发中最常见,Notepad++很可能会添加这些功能。在现在,对于您的代码:给定上面的三个文件,与您的代码类似的代码会产生以下结果:
代码:
^{pr2}$输出:
可以清楚地看到,Python对
\n
字符进行拆分,但不会将其从输出中删除。这就是为什么“mac”示例只有一行。在如果必须处理来自异类源的文件,请考虑使用
U
标志将“universal newlines”支持激活为open。在这里有一个例子。注意,唯一改变的是
U
参数改为open
:输出:
如您所见,并非所有文件的行为都相同。这可能会提示您在阅读文本文件的任何地方插入
U
。然而,我确信这是一个很好的理由,为什么它不是默认的!:)相关问题 更多 >
编程相关推荐