Python Forum
supporting both str and bytes on write file
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
supporting both str and bytes on write file
#3
There are many ways to do this.

class ReadWriteMixed:
    def __init__(self, fileobj):
        self.fileobj = fileobj
    
    def __getattr__(self, name):
        """
        For lazyness
        """
        return getattr(self.fileobj, name)

    def write(self, data: str | bytes):
        if isinstance(data, str) and "b" in self.fileobj.mode:
            data = data.encode()
        elif isinstance(data, bytes) and "b" not in self.fileobj.mode:
            data = data.decode()

        self.fileobj.write(data)

    def read_bytes(self, size=None):
        data = self.fileobj.read(size)
        if "b" not in self.fileobj.mode:
            data = data.encode()
        return data

    def read_text(self, size=None):
        data = self.fileobj.read(size)
        if "b" in self.fileobj.mode:
            data = data.decode()
        return data

def open_mixed(file, mode="r"):
    return ReadWriteMixed(open(file, mode))


file_like = open_mixed("/etc/issue", "rb") # open in bytes mode
print(file_like.read_text())  # read_text makes an implicit conversion, if mode is bytes
But I would never use this code. The problem is, that you have lesser control if something happens automagically.
Almost dead, but too lazy to die: https://sourceserver.info
All humans together. We don't need politicians!
Reply


Messages In This Thread
RE: supporting both str and bytes on write file - by DeaD_EyE - Jul-07-2022, 12:49 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  supporting both strings and bytes in functions Skaperen 0 1,959 Nov-28-2019, 03:17 PM
Last Post: Skaperen

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020