简体   繁体   中英

Creating a custom file like object python suggestions?

Hi i am looking to implement my own custom file like object for an internal binary format we use at work(i don't really want to go into too much detail because i don't know if i can). I am trying to go for a more pythonic way of doing things since currently we have two functions read/write(each ~4k lines of code) which do everything. However we need more control/finesse hence the fact of me rewriting this stuff.

I looked at the python documentation and they say what methods i need to implement, but don't mention stuff like iter () / etc.

Basically what i would love to do is stuff like this:

output_file_objs = [
    open("blah.txt", "w")
    open("blah142.txt", "wb")
    my_lib.open("internal_file.something", "wb", ignore_something=True)
]

data_to_write = <data>

for f in output_file_objs:
    f.write(data_to_write)

So i can mix it in with the others, and basically have a level of transparency. I will add custom methods to it, but thats not a problem.

Is there any sort of good reference regarding writing your own custom file like objects? Like any form of restrictions or special methods ( iter ). I should implement?

Or is there a good example of one from within the python standard library that i can look at?

What makes up a "file-like" actually depends on what you intend to use it for; not all methods are required to be implemented (or to have a sane implementation).

Having said that, the file and iterator docs are what you want.

Why not stuff your data in StringIO? Otherwise, you can look at the documentation and implement all of the file like methods. Truth be told, there are no real interfaces in Python, and some features (like tell()) may not make sense for your files, so you can leave them unimplemented.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM