How to create fake text file in Python
Question:
How can I create a fake file object in Python that contains text? I’m trying to write unit tests for a method that takes in a file object and retrieves the text via readlines()
then do some text manipulation. Please note I can’t create an actual file on the file system. The solution has to be compatible with Python 2.7.3.
Answers:
This is exactly what StringIO
/cStringIO
(renamed to io.StringIO
in Python 3) is for.
Or you could implement it yourself pretty easily especially since all you need is readlines()
:
class FileSpoof:
def __init__(self,my_text):
self.my_text = my_text
def readlines(self):
return self.my_text.splitlines()
then just call it like:
somefake = FileSpoof("This is a bunchnOf Text!")
print somefake.readlines()
That said the other answer is probably more correct.
In Python3
import io
fake_file = io.StringIO("your text goes here") # takes string as arg
fake_file.read() # you can use fake_file object to do whatever you want
In Python2
import io
fake_file = io.StringIO(u"your text goes here") # takes unicode as argument
fake_file.read() # you can use fake_file object to do whatever you want
For more info check docs here
It’s easy using faker-file (supported formats BIN
, CSV
, DOCX
, ICO
, JPEG
, PDF
, PNG
, PPTX
, SVG
, TXT
, WEBP
and ZIP
).
Installation
pip install faker-file[common]
Usage
from faker import Faker
from faker_file.providers.txt_file import TxtFileProvider
FAKER = Faker()
FAKER.add_provider(TxtFileProvider)
file = FAKER.txt_file()
Check the quick start and recipes for more.
How can I create a fake file object in Python that contains text? I’m trying to write unit tests for a method that takes in a file object and retrieves the text via readlines()
then do some text manipulation. Please note I can’t create an actual file on the file system. The solution has to be compatible with Python 2.7.3.
This is exactly what StringIO
/cStringIO
(renamed to io.StringIO
in Python 3) is for.
Or you could implement it yourself pretty easily especially since all you need is readlines()
:
class FileSpoof:
def __init__(self,my_text):
self.my_text = my_text
def readlines(self):
return self.my_text.splitlines()
then just call it like:
somefake = FileSpoof("This is a bunchnOf Text!")
print somefake.readlines()
That said the other answer is probably more correct.
In Python3
import io
fake_file = io.StringIO("your text goes here") # takes string as arg
fake_file.read() # you can use fake_file object to do whatever you want
In Python2
import io
fake_file = io.StringIO(u"your text goes here") # takes unicode as argument
fake_file.read() # you can use fake_file object to do whatever you want
For more info check docs here
It’s easy using faker-file (supported formats BIN
, CSV
, DOCX
, ICO
, JPEG
, PDF
, PNG
, PPTX
, SVG
, TXT
, WEBP
and ZIP
).
Installation
pip install faker-file[common]
Usage
from faker import Faker
from faker_file.providers.txt_file import TxtFileProvider
FAKER = Faker()
FAKER.add_provider(TxtFileProvider)
file = FAKER.txt_file()
Check the quick start and recipes for more.