使用扫描器导入
假设有一个文件,里面有一组记录,第一行的内容是:
@ 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)来回到文件的开头。