Wrap binary file-like object to get decoded text file-like object in Python

Problem:

In Python, you have a file-like object that reads binary data (e.g. if you open a file using open("my-file", "rb"))

You want to pass that file-like object to a function that expects a file-like object that expects a file-like object in text mode (i.e. where you can read *str*from, not bytes).

Solution

Use io.TextIOWrapper:

with open("fp-lib-table", "rb") as infile:
    # infile.read() would return bytes
    text_infile = io.TextIOWrapper(infile)
    # text-infile.read() would return a str

In case you need to use a specific encoding, use encoding=...:

text_infile = io.TextIOWrapper(infile, encoding="utf-8")