我正在处理一个长字符串(值为0..255的元素),直接从文件中读取。我需要将字符串分成8个字节的块。我期望这个工作:Python没有按预期处理char字符串
rawindex = file.read()
for chunk in rawindex[::8]:
print sys.stderr, len(chunk)
......但len()总是返回1.我做错了什么?
更多信息: *这不是功课 *我可以发挥的范围(,, 8),但我真的想知道为什么上面的例子不工作
我正在处理一个长字符串(值为0..255的元素),直接从文件中读取。我需要将字符串分成8个字节的块。我期望这个工作:Python没有按预期处理char字符串
rawindex = file.read()
for chunk in rawindex[::8]:
print sys.stderr, len(chunk)
......但len()总是返回1.我做错了什么?
更多信息: *这不是功课 *我可以发挥的范围(,, 8),但我真的想知道为什么上面的例子不工作
的“步”参数在数组的索引中只是迭代每个第8个元素,而不是一次迭代8个元素。您的代码应如下所示:
step = 8
rawindex = file.read()
for index in range(0, len(rawindex), step):
print sys.stderr, len(rawindex[index:index+step])
谢谢,那是错误。 – 2012-08-04 09:48:25
您可以自己阅读正确大小的块。
read_chunk = lambda: my_file.read(8)
for chunk in iter(read_chunk, ''):
print len(chunk)
对不起,但这不是问题的答案。由于太复杂的原因不能解释我不想按块读取文件,而是处理来自char字符串的块。 – 2012-08-04 09:47:44
也许你可以澄清问题,删除任何提及的文件? – 2012-08-04 09:52:43
rawindex = file.read() # this line will return the file read output as a string. For example rawindex = abc efgh ijk
rawindex[::8] # will returns all the eight charactors from the above string. so the result will be 'ah'
如此有效for循环将是for chunk in 'ah':
在第一循环块将是一个。 len('a')将是1.所以总是len(块)将返回1.
我认为你应该使用range来代替rowindex [:: 8]。
你的'8'不是片大小,而是**步**的大小。 – JBernardo 2012-08-04 09:06:40