如何在Python中一次从文件读取一个字符?

9 投票
3 回答
4211 浏览
提问于 2025-04-19 06:34

我想从一个文件中逐个读取数字,看看每个字符是什么,比如它是数字、句点、加号或减号、字母e或E,还是其他字符……然后根据这些字符做我想做的操作。我该如何利用我现有的代码来实现这个呢?这是我尝试过的一个例子,但没有成功。我刚开始学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 个回答

2

其实这件事要简单得多。Python的itertools库里有一个很不错的工具,很多人都忽略了它。;-)

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

这里有一种逐个字符读取文件的技巧:

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语句可以打开文件,并且在你完成后会自动关闭它,省心又方便。
  • 通常读取一个字符的方法是用 f.read(1)
  • partial 这个工具可以创建一个不需要参数的函数,它总是用参数 1 来调用 f.read
  • 使用两个参数的形式调用 iter() 可以创建一个迭代器,它会一直循环,直到遇到空字符串作为文件结束的标记。
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))

撰写回答