【发布时间】:2013-11-29 22:24:33
【问题描述】:
是否有一种隐蔽的方式可以从文件或类似文件的对象中读取令牌而不读取整行?我立即拥有的应用程序(其他人的问题,不是我的问题)正在转置一个包含几行很长的行的大矩阵,本质上是在迭代器上执行itertools.izip(),以挑选出单列的元素。这个想法不是在迭代期间没有整个文件在内存中。
行是空格分隔的 ASCII 十进制数字。
使用 Java 的 Scanner 类问题会很简单,但我在 Python 标准库中看不到任何似乎在没有字符串中的整个输入的情况下进行标记的东西。
为了记录,我知道如何自己写这个。我只是想知道是否有我错过的标准工具。可以 EasyInstalled 的 FOSS/libre 也不错,但我在 PYPI 上也看不到任何东西。
完整的问题是获取样本输入:
"123 3 234234 -35434 112312 54 -439 99 0 42\n" +
"13 456 -78 910 333 -44 5555 6 8"
...并产生输出(作为生成器,无需一次将所有很长的行读入内存:
[123, 13], [3, 456], [234234, -78], ...etc
正如我所说,它本质上是 itertools.izip(iterator1, iterator2),将 iterator1 指向文件的开头,而 iterator2 则刚刚超过换行符以读取第二行。
【问题讨论】:
-
我很确定没有这样的内置可用。
-
您能说得更具体些吗?您想打印文件中的特定列而不在内存中保留整行吗?
-
@J.F.Sebastian 据说这些行是数百万个数字,我不知道为什么它们在一个文件中作为两个文本行。
-
@stranac 谢谢。我也没有看到任何东西,但这不是我第一次错过任何东西。