一个Python包,简化了检索、组织和更改数据的过程。

fluxif的Python项目详细描述


流质

A Python package that eases the process of retrieving, organizing and altering data.

所需软件包

  • 熊猫
  • imperium
  • ijson

安装

pip install fluxify

主要班级

fluxify.mapper.Mapper

这个类用于读取和处理带有少量数据的快速文件,这些数据可以加载到内存中。在

fluxify.lazy_mapper.LazyMapper

你可能已经猜到了,这个类用于迭代大型数据文件,不管它是CSV格式, JSON或XML。在

使用

从一个简单的CSV文件中检索数据

^{pr2}$

映射器实现

fromfluxify.mapperimportMapperimportyaml# Could also be loaded from a fileyamlmapping="""brand:    col: 1price:    col: 2state:    col: 3publish_date:    col: 4    transformations:        - { transformer: 'date', in_format: '%Y-%m-%d %H:%M:%S', out_format: '%H:%M %d/%m/%Y' }is_new:    conditions:        -            condition: "subject['state'] == 'new'"            returnOnSuccess: True            returnOnFail: False"""Map=yaml.load(yamlmapping,Loader=yaml.FullLoader)mapper=Mapper(_type='csv')data=mapper.map('path/to/csvfile.csv',Map)print(data)

Output

[{'brand': 'Xaomi',
        'price': '390.90',
        'state': 'used',
        'published_date': '12:32 03/01/2020''is_new': False
    },
    {'brand': 'iPhone',
        'price': '1299.90',
        'state': 'new',
        'published_date': '09:48 02/01/2020''is_new': True
    }]

LazyMapper实现

LazyMapper在结尾处不返回所有映射的数据,
相反,它将数据映射成可以指定的小尺寸,这样就不会最大限度地占用内存。在

fromfluxify.lazy_mapperimportLazyMapperimportyaml# Could also be loaded from a fileyamlmapping="""brand:    col: 1price:    col: 2state:    col: 3publish_date:    col: 4    transformations:        - { transformer: 'date', in_format: '%Y-%m-%d %H:%M:%S', out_format: '%H:%M %d/%m/%Y' }is_new:    conditions:        -            condition: "subject['state'] == 'new'"            returnOnSuccess: True            returnOnFail: False"""Map=yaml.load(yamlmapping,Loader=yaml.FullLoader)mapper=LazyMapper(_type='csv',error_tolerance=True,bulksize=500)mapper.map('path/to/csvfile.csv',Map)defsome_callback(results):foriteminresults:pass# Perform some actionmapper.set_callback(some_callback)mapper.map('path/to/csvfile.csv',Map)

如您所见,在本例中,映射器每次累积500个映射项时都会调用回调函数。在

映射设置

col键用于指定必须从中检索值的列号或属性名。
如果要将输入数据指定为检索值,请使用_all_作为col的值

transformations键用于对检索到的值应用转换。可用变压器如下所示。在

conditions键用于应用条件并更改检索到的值。
这些条件使用Python语法,但不能使用Python的所有本机函数。
可用功能如下所示。在

default用于定义检索到的值为null时的默认值
Warning:如果使用值定义了default键,则在应用转换之前将应用该键 和条件。在

JSON和XML的特殊情况

XML
如果要从多个同名XML标记中检索数据,请将multiple设置为true
如果您只想从多个XML标记中检索一个值,请将index键与multiple: true一起使用。在

检索XML值时,默认行为是检索标记的.text值。
如果要更改此设置,要检索包含许多其他标记的标记,请使用raw键并将其设置为false
这将返回一个xml.etree.Element类型的对象,您可以稍后对该对象应用转换以更改, 组织和检索数据。在

JSON
使用index键从数组中检索特定值。
当然,只有当检索到的值是array类型时,它才有效。在

支持的格式

FormatCSVJSONXMLTXT
SupportedYESYESYESNO

变压器

Fluxify有内置的变压器,可以改变/修改数据。在

^{tb2}$

例外情况

由于不同的原因,Fluxify有不同的异常类 它们位于exceptions子包fluxify.exceptions

ClassArgumentsDescription
ArgumentNotFoundExceptionmessageThis exception is raised whenever a argument is not found.
InvalidArgumentExceptionmessageThis exception is raised when a passed parameter/argument is invalid.
ConditionNotFoundExceptionmessageThis exception is raised when the "condition" key is not defined in the mapping.
UnsupportedTransformerExceptionmessageThis exception is raised when a transformer other than the ones defined above, is used.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
与ReentrantLock相比,java ReentrantReadWriteLock的性能非常差   java如何使用Maven Android Studio正确导入?   安卓将ADB添加到我的Java PC应用程序   反射Java getDeclaredConstructor失败,来自JUnit的NoSuchMethodException   JSP上siteedit标记库的java替代   JavaSpring环境概要文件和JPA   java中是否有一个类似于StringBuilder的类,唯一的区别是它具有固定的长度?   JavaMathContext。小数点32 vs MathContext。小数点64,使用哪一个,为什么?   java使用spring在Ibm Websphere MQ中实现重试逻辑   java调用SpriteBatch。开始()和结束()   java有一种从文本中读取文本的方法。文件,并将其设置为pom中的maven属性。xml专家?   java让sitemesh使用struts2   Java Swing:在现有窗口上定位对话框   使用带有MemSql的JPA本机查询的java Select json列