使用迭代法的无限循环

时间:2019-07-16 12:59:22

标签: python-3.x infinite-loop

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

代码:

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文件可以是任何文件。我只是说“我是海象”

有什么想法我做错了吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

这不是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与2个参数一起使用,则第一个必须是可调用的,第二个必须是 sentinel ;即iter需要终止时要寻找的东西。

在您的情况下,第二个参数是整数(1024); f.read返回一个字符串;所以它永远不会终止。

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

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