28

I have a bytearray and want to convert into a buffered reader. A way of doing it is to write the bytes into a file and read them again.

sample_bytes = bytes('this is a sample bytearray','utf-8')
with open(path,'wb') as f:
    f.write(sample_bytes)
with open(path,'rb') as f:
    extracted_bytes = f.read()
print(type(f))

output:

<class '_io.BufferedReader'>

But I want these file-like features without having to save bytes into a file. In other words I want to wrap these bytes into a buffered reader so I can apply read() method on it without having to save to local disk. I tried the code below

from io import BufferedReader
sample_bytes=bytes('this is a sample bytearray','utf-8')
file_like = BufferedReader(sample_bytes)
print(file_like.read())

but I'm getting an attribute error

AttributeError: 'bytes' object has no attribute 'readable'

How to I write and read bytes into a file like object, without saving it into local disc ?

1
  • 1
    import io; file_like = io.BytesIO(sample_bytes) Commented Nov 9, 2017 at 10:13

1 Answer 1

39

If all you are looking for is an in-memory file-like object, I would be looking at

from io import BytesIO
file_like = BytesIO(b'this is a sample bytearray')
print(file_like.read())
Sign up to request clarification or add additional context in comments.

2 Comments

I'm trying to pass this to a requests.post's files parameter, and it doesn't work. When I open the binary file and pass that it works.
@CsabaToth For someone in need, If you have the object of BytesIO, then pass it like io.BufferedReader(file_obj)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.