这是一个测试。我已经对这些文件名的长度进行了说明,并将名称和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'
...
长度打印正确,但名称只打印一次。这是为什么?
答案 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))]