2012-08-04 31 views
0

我正在处理一个长字符串(值为0..255的元素),直接从文件中读取。我需要将字符串分成8个字节的块。我期望这个工作:Python没有按预期处理char字符串

rawindex = file.read() 
for chunk in rawindex[::8]: 
    print sys.stderr, len(chunk) 

......但len()总是返回1.我做错了什么?

更多信息: *这不是功课 *我可以发挥的范围(,, 8),但我真的想知道为什么上面的例子不工作

+1

你的'8'不是片大小,而是**步**的大小。 – JBernardo 2012-08-04 09:06:40

回答

0

的“步”参数在数组的索引中只是迭代每个第8个元素,而不是一次迭代8个元素。您的代码应如下所示:

step = 8 
rawindex = file.read() 
for index in range(0, len(rawindex), step): 
    print sys.stderr, len(rawindex[index:index+step]) 
+0

谢谢,那是错误。 – 2012-08-04 09:48:25

0

您可以自己阅读正确大小的块。

read_chunk = lambda: my_file.read(8) 
for chunk in iter(read_chunk, ''): 
    print len(chunk) 
+0

对不起,但这不是问题的答案。由于太复杂的原因不能解释我不想按块读取文件,而是处理来自char字符串的块。 – 2012-08-04 09:47:44

+0

也许你可以澄清问题,删除任何提及的文件? – 2012-08-04 09:52:43

0
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]。

相关问题