如何从python中的文件一次读取一个字符?

时间:2014-09-01 19:15:36

标签: python file floating-point

我想从一个文件中读取一个数字列表,一次只能查询一个字符,以检查该字符是什么,是一个数字,一个句点,一个+或 - ,一个e或E,还是一些其他char ...然后根据它执行我想要的任何操作。如何使用我已有的现有代码执行此操作?这是我尝试过的一个例子,但没有用。我是python的新手。提前谢谢!

    import sys

    def is_float(n):
        state = 0
        src = ""
        ch = n
        if state == 0:
            if ch.isdigit():
                src += ch
                state = 1
                ...

    f = open("file.data", 'r')
    for n in f:
        sys.stdout.write("%12.8e\n" % is_float(n))

3 个答案:

答案 0 :(得分:52)

这是一种制作一个一个字符的文件迭代器的技术:

from functools import partial

with open("file.data") as f:
    for char in iter(partial(f.read, 1), ''):
        # now do something interesting with the characters
        ...
  • with-statement会打开文件,并在您完成后无条件关闭该文件。
  • read one character的常用方法是f.read(1)
  • partial通过始终使用参数 1 调用 f.read 来创建零参数的函数。
  • iter()的两个参数形式创建一个循环迭代器,直到您看到空字符串结尾标记。

答案 1 :(得分:1)

for x in open()从文件中读取行。以文本块的形式读取整个文件,然后浏览文本的每个字符:

import sys

def is_float(n):
    state = 0
    src = ""
    ch = n
    if state == 0:
        if ch.isdigit():
            src += ch
            state = 1
            ...

data = open("file.data", 'r').read()
for n in data: # characters
    sys.stdout.write("%12.8e\n" % is_float(n))

答案 2 :(得分:1)

事实上它更容易。在itertools中有一个很好的实用工具,它经常被忽略。 ; - )

for character in itertools.chain.from_iterable(open('file.data')):
    process(character)