使用 iter 方法无限循环

Infinite loop using iter method

我是一个业余爱好者,正在编写我自己的(非常糟糕的)压缩工具,只是为了好玩。 以下代码用于读取文本文件并创建文件中每个字符索引的字典。 我试图以 1K chuncks 的形式读取文件,只是为了它的地狱,但由于某种原因,我得到了一个无限循环。 我猜我误解了 "Iter" 方法中的某些内容。

代码:

def dictify(myFile):
    compDict = {}
    count = 0
    with open(myFile, 'r') as f:
        for chunk in iter(f.read, 1024):
            for ch in chunk:
                if ch in compDict:
                    compDict[ch].append(count)
                else:
                    compDict[ch] = []
                    compDict[ch].append(count)
                count += 1
            print(compDict)
    print(compDict)

dictify('test.txt')

print 语句用于调试目的,我将其保留,因为它可以让运行 inf 代码的任何人清楚。卢普群岛 此外 - txt 文件可以是任何内容。我的只是说 "I am the walrus"

知道我做错了什么吗? 谢谢!

这不是 iter 的工作方式。

您的示例在 doc 中给出为:

from functools import partial

with open('mydata.db', 'rb') as f:
    for block in iter(partial(f.read, 64), b''):
        process_block(block)

如果您使用带有两个参数的 iter,第一个必须是可调用的,第二个必须是 sentinel;即当 iter 需要终止时要寻找的东西。

在你的例子中,第二个参数是一个整数(1024); f.read returns 一个字符串;所以它永远不会终止。

如果您以文本模式(而不是二进制)读取文件,则需要进行以下更改(我还调整了您的块大小):

with open('mydata.db', 'r') as f:
    for block in iter(partial(f.read, 1024), ''):
        process_block(block)