使用虚假数据生成文件。
项目描述
创建带有虚假数据的文件。 在多种格式中。 不费吹灰之力。
先决条件
本包的所有核心依赖均为 MIT 许可证。本包的大部分可选依赖也都是 MIT 许可证,但也有一些是 BSD、Apache 2、GPL 或 HPND 许可证。
所有许可证均列在下面的括号中。
核心包需要 Python 3.7、3.8、3.9、3.10 或 3.11。
Faker (MIT) 是唯一的必需依赖项。
Django (BSD) 与 factory_boy (MIT) 的集成已在从版本 2.2 到 4.2 的 Django 上进行了测试(尽管目前仅对维护版本进行了测试)。
BMP、GIF 和 TIFF 文件支持需要 Pillow (HPND), 或者是 WeasyPrint (BSD)、pdf2image (MIT)、Pillow (HPND) 和 poppler (GPLv2) 的组合。
DOCX 文件支持需要 python-docx (MIT)。
ICO、JPEG、PNG、SVG 和 WEBP 文件支持需要 Pillow (HPND),或者是 imgkit (MIT) 和 wkhtmltopdf (LGPLv3) 的组合。
PDF 文件支持需要 Pillow (HPND),或者是 pdfkit (MIT) 和 wkhtmltopdf (LGPLv3),或者是 reportlab (BSD)。
PPTX 文件支持需要 python-pptx (MIT)。
ODP 和 ODT 文件支持需要 odfpy (Apache 2)。
PathyFileSystemStorage 存储支持需要 pathy (Apache 2)。
AzureCloudStorage 存储支持需要 pathy (Apache 2) 和 azure-storage-blob (MIT)。
GoogleCloudStorage 存储支持需要 pathy (Apache 2) 和 google-cloud-storage (Apache 2)。
SFTPStorage 存储支持需要 paramiko (LGLPv2.1)。
AugmentFileFromDirProvider 提供器需要以下组合之一:textaugment (MIT) 和 nltk (Apache 2),或者以下组合:nlpaug (MIT), PyTorch (BSD), transformers (Apache 2), numpy (BSD), pandas (BSD), tika (Apache 2) 和 Apache Tika (Apache 2)。
文档
安装
PyPI 上的最新稳定版本
包含所有依赖项
pip install faker-file[all]
仅核心
pip install faker-file
包含最常见的依赖项
所有内容,除了仅用于数据增强所需的机器学习库
pip install faker-file[common]
支持 DOCX
pip install faker-file[docx]
支持 EPUB
pip install faker-file[epub]
支持图像
pip install faker-file[images]
支持 PDF
pip install faker-file[pdf]
支持 MP3
pip install faker-file[mp3]
支持 XLSX
pip install faker-file[xlsx]
支持 ODS
pip install faker-file[ods]
支持 ODT
pip install faker-file[odt]
支持数据增强
pip install faker-file[data-augmentation]
支持 GoogleCloudStorage
pip install faker-file[gcs]
支持 AzureCloudStorage
pip install faker-file[azure]
支持 AWSS3Storage
pip install faker-file[s3]
或从 GitHub 下载的开发版本
pip install https://github.com/barseghyanartur/faker-file/archive/main.tar.gz
功能
支持的文件类型
BIN
BMP
CSV
DOCX
EML
EPUB
ICO
GIF
JPEG
JSON
MP3
ODS
ODT
ODP
PDF
PNG
RTF
PPTX
SVG
TAR
TIFF
TXT
WEBP
XLSX
XML
ZIP
对于所有图像格式(BMP、ICO、GIF、JPEG、PNG、SVG、TIFF 和 WEBP)和 PDF,都提供了纯图形和混合内容文件提供程序(还具有文本到图像的功能)。
其他提供程序
AugmentFileFromDirProvider:从指定的目录中随机选择文件制作增强副本。支持以下类型:DOCX、EML、EPUB、ODT、PDF、RTF 和 TXT。
AugmentRandomImageFromDirProvider:从指定的目录中增强随机图像文件。支持以下类型:BMP、GIF、JPEG、PNG、TIFF 和 WEBP。
AugmentImageFromPathProvider:从指定的路径中增强图像文件。支持的文件类型与 AugmentRandomImageFromDirProvider 提供器相同。
GenericFileProvider:从原始字节或预定义模板创建任何格式的文件。
RandomFileFromDirProvider:从指定的目录中随机选择文件。
FileFromPathProvider:从指定的路径获取文件。
支持的文件存储
本地文件系统存储
AWS S3 存储
Azure 云存储
Google 云存储
SFTP 存储
使用示例
使用 Faker
推荐方式
from faker import Faker
# Import the file provider we want to use
from faker_file.providers.txt_file import TxtFileProvider
FAKER = Faker() # Initialise Faker instance
FAKER.add_provider(TxtFileProvider) # Register the TXT file provider
file = FAKER.txt_file() # Generate a TXT file
# Meta-data is stored inside a ``data`` attribute (``dict``).
# The following line would produce something like /tmp/tmp/tmphzzb8mot.txt
print(file.data["filename"])
# The following line would produce a text generated by Faker, used as
# the content of the generated file.
print(file.data["content"])
如果您只需要返回 bytes(而不是创建文件),请提供 raw=True 参数(适用于所有提供器类和内部函数)
from faker import Faker
from faker_file.providers.txt_file import TxtFileProvider
FAKER = Faker()
FAKER.add_provider(TxtFileProvider)
raw = FAKER.txt_file(raw=True)
但这也可以工作
from faker import Faker
from faker_file.providers.txt_file import TxtFileProvider
FAKER = Faker()
file = TxtFileProvider(FAKER).txt_file()
如果您只需要 bytes 返回
from faker import Faker
from faker_file.providers.txt_file import TxtFileProvider
FAKER = Faker()
raw = TxtFileProvider(FAKER).txt_file(raw=True)
使用 factory_boy
upload/models.py
from django.db import models
class Upload(models.Model):
# ...
file = models.FileField()
upload/factories.py
注意,当使用 faker-file 与 Django 和本地文件系统存储时,您需要将您的 MEDIA_ROOT 设置作为 root_path 值传递给选定的文件存储,如下所示。
import factory
from django.conf import settings
from factory import Faker
from factory.django import DjangoModelFactory
from faker_file.providers.docx_file import DocxFileProvider
from faker_file.storages.filesystem import FileSystemStorage
from upload.models import Upload
FS_STORAGE = FileSystemStorage(
root_path=settings.MEDIA_ROOT,
rel_path="tmp"
)
factory.Faker.add_provider(DocxFileProvider)
class UploadFactory(DjangoModelFactory):
# ...
file = Faker("docx_file", storage=FS_STORAGE)
class Meta:
model = Upload
元数据
任何文件提供器文件生成函数的返回值是 StringValue 或 BytesValue,分别继承自 str 和 bytes。
字符串值和字节值实例都有一个名为 data 的元数据属性(类型为 dict)。各种文件提供者使用 data 来存储元数据,例如 filename(生成文件的绝对路径;对所有文件提供者有效),或 content(生成文件时使用的文本;对大多数文件提供者有效,但除 FileFromPathProvider、RandomFileFromDirProvider、TarFileProvider 和 ZipFileProvider 之外)。
所有文件提供者都将生成文件的绝对路径存储在 data 属性的 filename 键中,以及存储在 storage 键中使用的存储实例。下表显示了详细信息。
键名 |
文件提供者 |
---|---|
filename |
all |
storage |
all |
content |
所有除 FileFromPathProvider、RandomFileFromDirProvider、TarFileProvider、ZipFileProvider 以外的提供者,以及所有图形文件提供者,如 GraphicBmpFileProvider、GraphicGifFileProvider、GraphicIcoFileProvider、GraphicJpegFileProvider、GraphicPdfFileProvider、GraphicPngFileProvider、GraphicTiffFileProvider 和 GraphicWebpFileProvider |
inner |
仅 EmlFileProvider、TarFileProvider 和 ZipFileProvider |
文件存储
所有文件操作都委托给存储的单独抽象层。
以下存储已实现
FileSystemStorage:没有额外要求。
PathyFileSystemStorage:需要 pathy。
AzureCloudStorage:需要 pathy 和与 Azure 相关的依赖项。
GoogleCloudStorage:需要 pathy 和与 Google Cloud 相关的依赖项。
AWSS3Storage:需要 pathy 和与 AWS S3 相关的依赖项。
SFTPStorage:需要 paramiko 和相关依赖项。
使用存储的示例
FileSystemStorage 示例
本地文件系统存储。没有依赖项。
root_path:根目录的路径。以 Django 为例,这将是指向 MEDIA_ROOT 目录的路径。重要的是要知道,root_path 不会嵌入到文件的字符串表示中。只有 rel_path 会。
rel_path:从根目录的相对路径。以 Django 为例,这将是指向文件的其余路径。
import tempfile
from faker import Faker
from faker_file.providers.txt_file import TxtFileProvider
from faker_file.storages.filesystem import FileSystemStorage
FS_STORAGE = FileSystemStorage(
root_path=tempfile.gettempdir(), # Use settings.MEDIA_ROOT for Django
rel_path="tmp",
)
FAKER = Faker()
file = TxtFileProvider(FAKER).txt_file(storage=FS_STORAGE)
FS_STORAGE.exists(file)
PathyFileSystemStorage 示例
本地文件系统存储。需要 pathy。
import tempfile
from pathy import use_fs
from faker import Faker
from faker_file.providers.txt_file import TxtFileProvider
from faker_file.storages.cloud import PathyFileSystemStorage
use_fs(tempfile.gettempdir())
PATHY_FS_STORAGE = PathyFileSystemStorage(
bucket_name="bucket_name",
root_path="tmp",
rel_path="sub-tmp",
)
FAKER = Faker()
file = TxtFileProvider(FAKER).txt_file(storage=PATHY_FS_STORAGE)
PATHY_FS_STORAGE.exists(file)
AWSS3Storage 示例
AWS S3 存储。需要 pathy 和 boto3。
from faker import Faker
from faker_file.providers.txt_file import TxtFileProvider
from faker_file.storages.aws_s3 import AWSS3Storage
S3_STORAGE = AWSS3Storage(
bucket_name="bucket_name",
root_path="tmp", # Optional
rel_path="sub-tmp", # Optional
# Credentials are optional too. If your AWS credentials are properly
# set in the ~/.aws/credentials, you don't need to send them
# explicitly.
credentials={
"key_id": "YOUR KEY ID",
"key_secret": "YOUR KEY SECRET"
},
)
FAKER = Faker()
file = TxtFileProvider(FAKER).txt_file(storage=S3_STORAGE)
S3_STORAGE.exists(file)
测试
只需输入
pytest -vrx
或使用 tox
tox
或使用 tox 检查特定环境
tox -e py310-django41
编写文档
保持以下层次结构。
=====
title
=====
header
======
sub-header
----------
sub-sub-header
~~~~~~~~~~~~~~
sub-sub-sub-header
^^^^^^^^^^^^^^^^^^
sub-sub-sub-sub-header
++++++++++++++++++++++
sub-sub-sub-sub-sub-header
**************************
许可证
MIT
支持
有关安全问题,请通过在 作者 部分提供的电子邮件与我联系。
有关总体问题,请访问 GitHub。
引用
请在您的研究中引用 faker-file 时使用以下条目
@software{faker-file,
author = {Artur Barseghyan},
title = {faker-file: Create files with fake data. In many formats. With no efforts.},
year = {2022-2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {https://github.com/barseghyanartur/faker-file},
}