पायथन 3 में बाइट्स के लिए बी के बिना उपसर्ग दबाएं / प्रिंट करें


112

बस इसे पोस्ट करना इसलिए मैं इसे बाद में खोज सकता हूं, क्योंकि यह हमेशा मुझे स्टंप करता है:

$ python3.2
Python 3.2 (r32:88445, Oct 20 2012, 14:09:50) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import curses
>>> print(curses.version)
b'2.2'
>>> print(str(curses.version))
b'2.2'
>>> print(curses.version.encode('utf-8'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'encode'
>>> print(str(curses.version).encode('utf-8'))
b"b'2.2'"

प्रश्न के रूप में: उपसर्ग के bytesबिना पायथन 3 में एक बाइनरी ( ) स्ट्रिंग कैसे प्रिंट करें b'?


जवाबों:


111

उपयोग करें decode:

print(curses.version.decode())
# 2.2

1
@ जैमाइलक यह याद दिलाता है कि यह पैरामीटर को स्वीकार कर सकता है
— जेमशीट इस्केंडरोव

1
डिफ़ॉल्ट रूप से यह कैसे करना है, मेरा मतलब है, क्या utf-8डिफ़ॉल्ट रूप से उपयोग करना बुरा है ? मैं .decode('utf-8')हर उस चीज का उपयोग नहीं करना चाहता जिसे मैं कुछ प्रिंट करता हूं।
— शुभम ए।

कस्टम प्रिंट बनाएं
— SmartManoj

यह देखना सुनिश्चित करें कि curses.versionकोई भी नहीं है
— काउलिनेटर

24

यदि बाइट्स पहले से ही एक उपयुक्त वर्ण एन्कोडिंग का उपयोग करते हैं; आप उन्हें सीधे प्रिंट कर सकते हैं:

sys.stdout.buffer.write(data)

या

nwritten = os.write(sys.stdout.fileno(), data)  # NOTE: it may write less than len(data) bytes

12

यदि हम bytes.__repr__इसके लिए स्रोत पर एक नज़र डालते हैं , तो ऐसा लगता b''है कि विधि में बेक किया गया है।

सबसे स्पष्ट वर्कअराउंड मैन्युअल रूप b''से परिणामस्वरूप से टुकड़ा करना है repr():

>>> x = b'\x01\x02\x03\x04'

>>> print(repr(x))
b'\x01\x02\x03\x04'

>>> print(repr(x)[2:-1])
\x01\x02\x03\x04

6
साइड नोट: मुझे नहीं लगता कि कोई अन्य उत्तर वास्तव में प्रश्न का उत्तर देता है।
— मतीन उल्हाक

मुझे लगता है कि मैं सहमत हो जाऊंगा: आपका समाधान, अर्थात् repr(x)[2:-1], एक strवस्तु का उत्पादन करता है जो इच्छा के रूप में प्रिंट करेगा। विशेष रूप से, repr(b'\x01')[2:-1]स्ट्रिंग लौटाता है \\x01, जबकि decode()वह वापसी करेगा \x01जो किसी के साथ काम नहीं करेगा print()। अधिक स्पष्ट होने के लिए, print(repr(b'\x01')[2:-1])प्रिंट करेगा \x01जबकि print(b'\x01'.decode())कुछ भी प्रिंट नहीं करेगा।
— एंटोनी

वैकल्पिक रूप से, print(repr(b"\x01".decode()))प्रिंट होगा '\x01', (एकल उद्धरण सहित एक स्ट्रिंग) ताकि print(repr(b"\x01".decode())[1:-1])प्रिंट \x01(एकल उद्धरण चिह्नों के बिना एक स्ट्रिंग)।
— एंटोनी 14

11

यदि डेटा UTF-8 संगत प्रारूप में है, तो आप बाइट्स को एक स्ट्रिंग में बदल सकते हैं।

>>> import curses
>>> print(str(curses.version, "utf-8"))
2.2

यदि डेटा पहले से ही UTF-8 संगत नहीं है, तो वैकल्पिक रूप से सबसे पहले हेक्स में कनवर्ट करें। जब डेटा वास्तविक कच्चे बाइट्स हैं।

from binascii import hexlify
from codecs import encode  # alternative
>>> print(hexlify(b"\x13\x37"))
b'1337'
>>> print(str(hexlify(b"\x13\x37"), "utf-8"))
1337
>>>> print(str(encode(b"\x13\x37", "hex"), "utf-8"))
1337
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.