我是一个业余爱好者,正在玩自己编写的(非常糟糕的)压缩工具,只是为了好玩。 以下代码用于读取文本文件并创建文件中每个字符的索引的字典。 我正试图以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文件可以是任何文件。我只是说“我是海象”
有什么想法我做错了吗? 谢谢!
答案 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)