使用扫描器导入

-1 投票
1 回答
563 浏览
提问于 2025-04-17 22:11

假设有一个文件,里面有一组记录,第一行的内容是:

@ 2014 2 14 00:03:01 Matt "login" 0.01

我想打印出整整一行的内容,然后再回过头来循环读取文件中的其他内容,这个我本来可以做得很好。不过我最近被告知我们的老师希望我们使用一个叫做“扫描器”的工具。简单来说,扫描器就是一个读取系统,它可以从文件中读取用空格分隔的内容。我对如何使用扫描器一次读取一行感到有些困惑……如果有人能帮我理解扫描器就太好了。

1 个回答

1

在Python的标准库里,有一个叫做tokenize的词法扫描器:http://docs.python.org/2/library/tokenize.html

你需要传递一个参数,这个参数是一个函数,扫描器会用它来读取一行内容,这样就可以处理各种输入,比如字符串、文件等等。

(读取第一行)

with file("...", 'r') as f:
    g = generate_tokens(f.readline())

或者(读取整个文件)

with file("...", 'r') as f:
    g = generate_tokens(f.read())

或者(逐行读取)

with file("...", 'r') as f:
    for l in f:
        g = generate_tokens(StringIO(l).readline)

这样就可以了。

你可以使用f.seek(0)来回到文件的开头。

撰写回答