How to create fake text file in Python
Asked Answered
G

4

20

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.

Glide answered 6/8, 2012 at 17:57 Comment(0)
B
36

This is exactly what StringIO/cStringIO (renamed to io.StringIO in Python 3) is for.

Blossom answered 6/8, 2012 at 17:59 Comment(3)
The solution has to be compatible with Python 2.7.3Glide
@Glide The StringIO version is... or are you using a different 2.7.3 than the rest of the world?Kristinakristine
@Glide StringIO is compatible with 2.7.3 and above.Nicholenicholl
C
5

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 bunch\nOf Text!")
print somefake.readlines()

That said the other answer is probably more correct.

Cooperman answered 6/8, 2012 at 18:9 Comment(0)
A
4

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

Anatole answered 20/11, 2019 at 10:40 Comment(0)
C
0

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.

Christianechristiania answered 6/12, 2022 at 9:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.