Skip to main content

Write/read from memory instead of files when open() is called

Project description

Write/read from memory instead of files when open() is called

@read_decorator fakes the existence of a file and provides the file content when open(mode='r'/mode='rb') from the builtins is called.

@write_decorator captures the output when open(mode='w'/mode='wb') from the builtins is called.

The decorators don't work with functions/methods that don't use the open() function (for example: cv2.imread / cv2.imwrite)

Some examples

import pandas as pd
import cv2
from PIL import Image
import numpy as np
import os.path
from fake_read_write_files import read_decorator, write_decorator

@read_decorator
def readutf8(filename, _file_data):
    with open(filename, mode="r", encoding="utf-8") as f:
        data = f.read()
    return data


@write_decorator
def write_pil_image(pilpic, filepath):
    pilpic.save(filepath)
    # don't use "return" here, the function will return a dict


@read_decorator
def read_bin_file(filename, _file_data):
    with open(filename, mode="rb") as f:
        data = f.read()
    return data


@read_decorator
def pandasread(filename, _file_data):
    return pd.read_csv(filename)


@write_decorator
def pandaswrite(df, filename):
    df.to_csv(filename)
    # don't use "return" here, the function will return a dict


# the read decorator always checks for the kwarg "_file_data"
# It must be passed as a kwarg
e = readutf8(
    filename="f:\\txtdoesnotexist.txt", _file_data="I am fake\nDid you know that?"
)
print(e)

# real file
bi = Image.open(r"C:\Users\Gamer\anaconda3\envs\dfdir\xxxxxxxxxx.png")

# writing to a fake file, returns a dict with all written files in the function,
# even if there is no return value declared
o = write_pil_image(bi, filepath="i_am_a_fake_image.png")
print(
    cv2.imdecode(np.frombuffer(o["i_am_a_fake_image.png"], np.uint8), cv2.IMREAD_COLOR)
)


binaryfile = read_bin_file(
    filename="i_am_a_fake_image.png", _file_data=o["i_am_a_fake_image.png"]
)


df = pandasread(filename="test.csv", _file_data="john,1\nmaria,2\ncarlos,3")
print(df)

pdcsv = pandaswrite(df, filename="test.csv")
print(pdcsv)


# output 
I am fake
Did you know that?
[[[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [254 255 255]
  [253 255 255]]
 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [254 255 255]
  [253 255 255]]
 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [254 255 255]
  [253 255 255]]
 ...
 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 254]
  [255 255 254]
  [255 255 254]]
 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 254]
  [255 255 254]
  [255 255 254]]
 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 254]
  [255 255 254]
  [255 255 254]]]
     john  1
0   maria  2
1  carlos  3
{'test.csv': ',john,1\r\n0,maria,2\r\n1,carlos,3\r\n'}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fake_read_write_files-0.10.tar.gz (4.7 kB view details)

Uploaded Source

Built Distribution

fake_read_write_files-0.10-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file fake_read_write_files-0.10.tar.gz.

File metadata

  • Download URL: fake_read_write_files-0.10.tar.gz
  • Upload date:
  • Size: 4.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for fake_read_write_files-0.10.tar.gz
Algorithm Hash digest
SHA256 e2001765429c1d3d496058f5e47e86272e403fc86a420c52c501878167ddf6b5
MD5 a50126f2fbb1c6e668c556ddff86104e
BLAKE2b-256 7cb750a04281cc201b6ef3ed51c0402f9cd530f720a90e900d2fc3d4f6ced364

See more details on using hashes here.

File details

Details for the file fake_read_write_files-0.10-py3-none-any.whl.

File metadata

File hashes

Hashes for fake_read_write_files-0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 0e9ed8faf9c5637da144187cb33e058487ff3b3bbadcc2e317e26359a0787e8a
MD5 7fa1fd0c66b903c439020a9f42af7490
BLAKE2b-256 97b6b47c18c59831bb57dbb0a696bb32d76159f2950eae431149f5147d894b90

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page