第一个循环后,for循环中的对象为空白

时间:2015-07-28 05:19:03

标签: python-3.x

这是一个测试。我已经对这些文件名的长度进行了说明,并将名称和hexlified长度连接在一起。按此顺序(长度,名称)。现在我尝试使用此代码读取文件,

import binascii

test = ('TEST_.txt')

with open(test, 'rb') as infile_:
    infile_read = infile_.read()

start = (0)

for files in range(0, 20):

    name_len = infile_read[(start) : ((start) + (2))]

    name_len =  int.from_bytes((name_len), byteorder='big')

    file_name = infile_read[((start) + (2)) : ((name_len) + (2))]

    print(name_len)

    print(file_name)

    start = ((start) + (name_len) + (2))

txt文件,

" TEST_.txt" B' \ X00 \ ntest_0.png \ X00 \ ntest_1.png \ X00 \ ntest_2.png \ X00 \ ntest_3.png \ X00 \ ntest_4.png \ X00 \ ntest_5.png \ X00 \ ntest_6.png \ X00 \ ntest_7 .PNG \ X00 \ ntest_8.png \ X00 \ ntest_9.png \ X00 \ x0btest_10.png \ X00 \ x0btest_11.png \ X00 \ x0btest_12.png \ X00 \ x0btest_13.png \ X00 \ x0btest_14.png \ X00 \ x0btest_15.png \ X00 \ x0btest_16.png \ X00 \ x0btest_17.png \ X00 \ x0btest_18.png \ X00 \ x0btest_19.png \ X00 \ x0btest_20.png'

返回此内容,

>>>10
>>>b'test_0.png'
>>>10
>>>b''
>>>10
>>>b''
...

我不会回复此,

>>>10
>>>b'test_0.png'
>>>10
>>>b'test_1.png'
>>>10
>>>b'test_2.png'
...

长度打印正确,但名称只打印一次。这是为什么?

2 个答案:

答案 0 :(得分:0)

如果您对其他方法持开放态度,则可以split\x00字符{我已添加strip以删除其他类型的空白你的字符串):

filenames = infile_read.split(b'\x00')
for name in filenames:
   name = name.strip()
   print (len(name))
   print (name)
0
b''
10
b'test_0.png'
10
b'test_1.png'
10
b'test_2.png'
10
b'test_3.png'
10
b'test_4.png'
...

答案 1 :(得分:0)

这里的解决方案非常简单,我不确定我是如何错过它的。

此,

file_name = infile_read[((start) + (2)) : ((name_len) + (2))]

需要,

file_name = infile_read[((start) + (2)) : ((start) + (name_len) + (2))]