How to Create in-Memory File Object

How to Create in-Memory File Object

I want to make a in-memory file to use in pygame mixer. I mean something like which says load() method supports file object.

import requests
from pygame import mixer

r = requests.get("")
in_memory_file = file(r.content) # something like this
mixer.music.init()
mixer.music.load(in_memory_file)
mixer.music.play()

1 Answer

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(b"\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x01\x01")

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("")
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 don't need to manually call the close() method anymore:

import requests
from pygame import mixer
import io

r = requests.get("")

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Chloe Bennett
Author

Chloe Bennett

Chloe Bennett explores the intersection of pop culture, streaming entertainment, digital trends, and contemporary lifestyle. Her weekly commentary reaches thousands of culture enthusiasts.