在Python3.x中从文件读取令牌

在Python3.x中从文件读取令牌,python,python-3.x,input,Python,Python 3.x,Input,是否有某种方法可以通过令牌从文件中读取信息,而不考虑格式?例如,如果我试图从输入文件生成ppm图像,而不是生成2个像素 255 0 0 0 0 255 它似乎是 255 0 0 0 0 255 在这种情况下,我希望通过令牌而不是通过循环中的行来读取,但我找不到任何与此相关的内置方法。您可以使用,其中iter-able将是line.split(),用于fin中的line: >>> with open('temp.txt', 'r') as fin: ... iter

是否有某种方法可以通过令牌从文件中读取信息,而不考虑格式?例如,如果我试图从输入文件生成ppm图像,而不是生成2个像素

255 0 0
0 0 255
它似乎是

255
0 0
0
0 255
在这种情况下,我希望通过令牌而不是通过循环中的行来读取,但我找不到任何与此相关的内置方法。

您可以使用,其中iter-able将是
line.split(),用于fin中的line

>>> with open('temp.txt', 'r') as fin:
...      iter = chain.from_iterable(line.split() for line in fin)
...      print(list(iter))
... 
['255', '0', '0', '0', '0', '255']

您可以始终滚动自己的文件迭代器:

class file_tokens:
    def __init__(self, file):
        self.file = file
        self.line = []
    def __iter__(self):
        return self
    def next(self):
        while not len(self.line):
            self.line = self.file.readline()
            if not self.line:
                raise StopIteration
            self.line = self.line.split()
        return self.line.pop(0)
然后像普通文件一样使用:

for token in file_tokens(open(infile)):
    print('Token: ' + token)

由于某种原因导致它在没有真正原因的情况下跳过一行,然后在仅仅一行之后退出。@user3448183除非我看到代码或文件内容,否则我无法说出原因;你在上面的例子中所做的工作,你认为什么是一个令牌?在这种情况下,我会认为255是一个令牌,因此,没有任何内置方法可以一次读取一个或以3人一组的方式读取这些令牌?出于某种原因,他的答案打印出p340002555500,而不是p340002025500。它从文件中跳过一整行。你认为这是最好的方法吗?这取决于你的目的。如果您需要在整个代码中的多个地方执行此操作,那么我认为由于可重用性,与其他方法相比,此方法具有明显的优势。如果您只需要使用一次,那么最好使用2级循环。我将运行for循环,然后我需要开始以3为一组获取数字并附加它们。为了避免
iter()返回类型为
错误的非迭代器,您需要在Python 3中使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。