我正在进行Python挑战,但在任务6中我遇到了一些问题:
comments = []
comments.append(file_zip.getinfo('%s.txt'%name).comment)
print(''.join(comments))
但这给了我错误:
TypeError:序列项0:预期的str实例,找到的字节
我找到了答案,并尝试这样:
print(b''.join(comments))
它工作和打印:
b'***************************************************************\n****************************************************************\n** **\n** OO OO XX YYYY GG GG EEEEEE NN NN **\n** OO OO XXXXXX YYYYYY GG
GG EEEEEE NN NN **\n** OO OO XXX XXX YYY YY GG GG EE NN NN **\n** OOOOOOOO XX XX YY GGG EEEEE NNNN **\n** OOOOOOOO XX XX YY GGG EEEEE NN **\n** OO OO XXX XXX YYY YY GG GG EE NN **\n**
OO OO XXXXXX YYYYYY GG GG EEEEEE NN **\n** OO OO XX YYYY GG GG EEEEEE NN
我认为它将'/n'
视为char并打印出来,但是,我不希望这样。我怎样才能使它发挥作用?
答案 0 :(得分:11)
问题是file_zip.getinfo('%s.txt'%name).comment
显然会返回bytes
个对象。当您尝试加入str
,即''.join(..)
时,您会收到错误消息:
''.join([b'hello', b'\n', b'world'])
TypeError: sequence item 0: expected str instance, bytes found
加入b''
是一个可行的选择,但正如您所说,它不会像'\n'
那样逃避特殊字符;这是bytes
个实例的预期行为。
在decode
join
上b''
后,您可以print(b''.join(comments).decode())
字符串:
decode
或comments
map
的每个元素,join
和''
在您最初尝试的空字符串print(''.join(map(bytes.decode, comments)))
上:
Bitmap MasterImage = new Bitmap(PageSize.Width, PageSize.Height, PixelFormat.Format32bppArgb);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(MasterImage);