I decided to write a tiny class to automatically write and delete a file given filename and content. It is intended to make testing IO less verbose. I include a small example usage.
temporary.py
import os
class Temporary:
def __init__(self, name, content):
self.name = name
self.content = content
def __enter__(self):
with open(self.name, 'w+') as f:
f.write(self.content)
def __exit__(self,_,__,___):
os.remove(self.name)
first_word.py
import doctest
from temporary import Temporary
def first_word_of_each_line(filename):
"""
>>> txt = '\\n'.join(['first line', 'second line', 'bar bar'])
>>> with Temporary('foo.txt', txt): first_word_of_each_line('foo.txt')
['first', 'second', 'bar']
"""
with open(filename) as f:
lines = f.read().splitlines()
return [line.split()[0] for line in lines]
if __name__ == "__main__":
doctest.testmod()
1 Answer 1
There, well, really isn't much to review here, so I have just a couple of points on this.
- Add a docstring to the class
Temporary
. Describe what this class does in detail, and flesh it out with useful information about arguments as well. - You're missing some whitespace in between parameters in your
__exit__
declaration. It should look like thisdef __exit__(self, _, __, ___)
. - You should add a method like
write_to_file
so that the user can change the contents of the file during runtime, before it's deleted. - As mentioned by @GarethRees, there's already a Python module built for this kind of use,
tempfile
.
I hope this helps! If there's anything else that you want me to cover on this, mention it in the comments, and I'll see if I can cover it.
Explore related questions
See similar questions with these tags.
open
using something like pypi.python.org/pypi/mock \$\endgroup\$tempfile
module? \$\endgroup\$with
not intended to be used for serious purposes \$\endgroup\$