' '
is a string which you're calling its join
method with a byte sequence. As the documentation's stated, in python-3.x:
str.join
Return a string which is the concatenation of the strings
in the iterable iterable. A TypeError will be raised if there are any
non-string values in iterable, including bytes objects. The separator
between elements is the string providing this method.
But in this case since you are dealing with byte objects you cannot use str
related methods. The byte object itself comes with a join()
method that can be used in the same manner as str.join
. You can also use io.BytesIO
, or you can do in-place concatenation with a bytearray
object. As the documentation's mentioned bytearray
objects are mutable and have an efficient overallocation mechanism.
So you can simply add a b
prefix to the empty string to make it a byte object:
line = b" ".join(line.split())
Also, if your file is contain strings you can simply open your file in a str
mode ('r'
)instead of byte ('rb'
).
with open("input.txt", "r") as f:
# Do something with f
Note that despite the separation between str
and byte
objects in python-3.x, in python-2.x you only have str
. You can see this by checking the type of a string with b
prefix:
In [2]: type(b'')
Out[2]: str
And that's what that makes the following snippet work:
"".join([b'www', b'www'])
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…