2015-07-28 3 views
2

Это тест. Я выделил длину этих имен файлов и объединил имена и шестнадцатеричные длины вместе. В этом порядке (Длина, Имя). Теперь я пытаюсь прочитать файл, используя этот код,Объект для цикла пустой после первого цикла

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)) 

текстовый файл,

"TEST_.txt" Ь '\ 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' 
... 

Длины печати правильно, но имена печатать только один раз. Почему это?

ответ

0

Решение было довольно простым, я не уверен, как я пропустил это.

Это

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

должно быть,

file_name = infile_read[((start) + (2)) : ((start) + (name_len) + (2))] 
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' 
... 
+0

Нет такой подход должен быть я определен. Никакой другой способ не будет работать на то, что я делаю. –

Смежные вопросы