Python的readline()与Java Scanner类的nextLine()区别

4 投票
2 回答
2417 浏览
提问于 2025-04-18 01:32

Python的readline()和Java的Scanner类中的nextLine()有什么区别呢?

nextLine()会寻找下一个行分隔符,这个分隔符可能不仅仅是"\n",具体可以参考这里:

http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine()

那么,Python的readline()方法也是这样吗?这点很重要,因为我的文件可能有其他的行分隔符,但我需要特别寻找换行符。

有没有什么想法呢?

2 个回答

1

你应该自己测试一下。

我在控制台上用 f.readline() 测试过,它会读取到 \n 为止,即使这一行里面有 \r

>>> f.readline()
'This is a test\n'
>>> f.readline()
'Second line\rwith char\n'
>>> f.readline()
'Third line' 

注意: 如果你直接在 Python 脚本中打印读取的行,可能会出现一些奇怪的情况。但如果你使用 repr(str),你就能看到所有的 \n\r

1

首先,你在比较苹果和橘子。Scanner 其实并不是 Java 中和 Python 文件对象相等的东西。BufferedReader 才是它的对应物。实际上,如果你查看 BufferedReadernextLine 方法的说明,你会发现:

这个方法用来读取一行文本。一行的结束可以是换行符('\n')、回车符('\r'),或者是回车符后面紧跟着换行符。

Python 也有类似的处理方式:它会这样做

在处理文本流时,以下所有情况都被认为是行的结束:Unix 的换行符 '\n'、Windows 的换行符 '\r\n',以及旧版 Macintosh 的换行符 '\r'。你可以查看 PEP 278 和 PEP 3116,以及 str.splitlines() 的其他用法。


据我所知,Python 并没有一个和 Java 的 Scanner 相对应的公开版本。不过,确实有一个(未文档化的)re.Scanner,可以用来实现你想要的功能。你只需在创建实例时提供一个“词汇表”,然后调用 scan 方法。

实现你想要的功能,最简单的方法可能是分块读取文件,然后使用 re.split 来拆分。

撰写回答