使用 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)
我是一个业余爱好者,正在编写我自己的(非常糟糕的)压缩工具,只是为了好玩。 以下代码用于读取文本文件并创建文件中每个字符索引的字典。 我试图以 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)