Почему Python не может помещаться в string.format с "\ x00"?

Мне нужно заполнить строку нулевыми символами ("\ x00"). Я знаю много способов сделать это, поэтому, пожалуйста, не отвечайте альтернативами. Я хочу знать: почему функция string.format() Python не позволяет string.format() нулями?

Тестовые случаи:

 >>> "{0:\x01<10}".format("bbb") 'bbb\x01\x01\x01\x01\x01\x01\x01' 

Это показывает, что символы с шестнадцатеричным экранированием работают в целом.

 >>> "{0:\x00<10}".format("bbb") 'bbb ' 

Но «\ x00» превращается в пространство («\ x20»).

 >>> "{0:{1}<10}".format("bbb","\x00") 'bbb ' >>> "{0:{1}<10}".format("bbb",chr(0)) 'bbb ' 

Даже пробовать пару других способов сделать это.

 >>> "bbb" + "\x00" * 7 'bbb\x00\x00\x00\x00\x00\x00\x00' 

Это работает, но не использует string.format

 >>> spaces = "{0: <10}".format("bbb") >>> nulls = "{0:\x00<10}".format("bbb") >>> spaces == nulls True 

Python явно заменяет пробелы ( chr(0x20) ) вместо нулей ( chr(0x00) ).

Поскольку метод string.format в Python2.7 является обратным портом из Python3 string.format . Python2.7 unicode – это строка Python 3, где строка Python2.7 представляет собой байты Python3. Строка – это неправильный тип для выражения двоичных данных в Python3. Вы должны использовать байты, которые не имеют метода форматирования. Так что действительно вы должны спросить, почему метод format в строке вообще в 2.7, когда он должен был быть действительно только для типа unicode, так как это то, что стало строкой в ​​Python3.

Который я предполагаю, что ответ заключается в том, что это слишком удобно, чтобы иметь его там.

Как связанный вопрос, почему еще нет format в байтах