python – How to create in-memory file object

python – How to create in-memory file object

You are probably looking for BytesIO or StringIO classes from Python io package, both available in python 2 and python 3. They provide a file-like interface you can use in your code the exact same way you interact with a real file.

StringIO is used to store textual data:

import io

f = io.StringIO(some initial text data)

BytesIO must be used for binary data:

import io

f = io.BytesIO(bx00x00x00x00x00x00x00x00x01x01x01x01x01x01)

To store MP3 file data, you will probably need the BytesIO class. To initialize it from a GET request to a server, proceed like this:

import requests
from pygame import mixer
import io

r = requests.get(http://example.com/somesmallmp3file.mp3)
inmemoryfile = io.BytesIO(r.content)

mixer.music.init()
mixer.music.load(inmemoryfile)
mixer.music.play()

# This will free the memmory from any data
inmemoryfile.close()

Additional note: as both classes inherit from IOBase, they can be used as context manager with the with statement, so you dont need to manually call the close() method anymore:

import requests
from pygame import mixer
import io

r = requests.get(http://example.com/somesmallmp3file.mp3)

with io.BytesIO(r.content) as inmemoryfile:
    mixer.music.init()
    mixer.music.load(inmemoryfile)
    mixer.music.play()

python – How to create in-memory file object

Leave a Reply

Your email address will not be published. Required fields are marked *