将csv数据文件夹到数据类中

dataclass-csv的Python项目详细描述


构建状态pypidownloads

数据类csv

数据类csv使使用csv文件比使用dict更容易和更好。它使用python的数据类来存储csv文件中每一行的数据,并且还使用类型注释来实现正确的类型检查和验证。

主要功能

  • 使用数据类而不是字典来表示csv文件中的行。
  • 利用dataclassproperties类型注释。dataclassreader使用类型注释对csv文件的数据执行验证。
  • 自动类型转换。dataclassreader支持strintfloatcomplexdatetimebool
  • 帮助您解决CSV文件中数据的问题。dataclassreader将准确显示csv文件的哪一行包含错误。
  • 只提取您需要的数据。它将只分析数据类中定义的属性
  • 熟悉的语法。dataclassreader的使用方法与标准库中的dictreader几乎相同。
  • 它使用数据类功能,允许您定义元数据属性,以便可以按您所需的方式准确分析数据。
  • 使代码更清晰。不再需要额外的循环来将数据转换为正确的类型、执行验证、设置默认值,dataclassreader将为您完成所有这些操作。

安装

pipenv install dataclass-csv

开始

首先,添加必要的导入:

fromdataclassesimportdataclassfromdataclass_csvimportDataclassReader

假设我们有一个csv文件,其内容如下:

firstname,email,age
Elsa,elsa@test.com, 11
Astor,astor@test.com, 7
Edit,edit@test.com, 3
Ella,ella@test.com, 2

让我们创建一个数据类来表示上面csv文件中的一行:

@dataclassclassUser():firstname:stremail:strage:int

dataclassuser有3个属性,firstnameemail属于str类型,age属于int类型

要加载和读取csv文件的内容,我们执行的操作与使用python标准库中的csv模块中的dictreader相同。打开文件后,我们创建一个传递两个参数的dataclassreader的实例。第一个是文件,第二个是我们希望用来表示csv文件的每一行的数据的数据类。像这样:

withopen(filename)asusers_csv:reader=DataclassReader(users_csv,User)forrowinreader:print(row)

dataclassreader在内部使用csv模块中的dictreader读取csv文件,这意味着您可以传递与传递给dictreader相同的参数。完整的参数列表如下所示:

dataclass_csv.DataclassReader(f,cls,fieldnames=None,restkey=None,restval=None,dialect='excel',*args,**kwds)

如果运行此代码,您将看到如下输出:

User(firstname='Elsa',email='elsa@test.com',age=11)User(firstname='Astor',email='astor@test.com',age=7)User(firstname='Edit',email='edit@test.com',age=3)User(firstname='Ella',email='ella@test.com',age=2)

错误处理

使用dataclassreader的一个优点是,它可以很容易地检测出csv文件中的数据类型与应用程序的模型所期望的不同。并且,dataclassreader显示有助于识别csv文件中有问题的行的错误。

例如,假设我们更改csv文件的内容,如"入门"部分中所示,并修改用户astor的age,将其更改为字符串值:

Astor, astor@test.com, test

请记住,在dataclassuser中,age属性用int注释。如果我们再次运行代码,将引发异常,并显示以下消息:

dataclass_csv.exceptions.CsvValueError: The field `age` is defined as <class 'int'> but
received a value of type <class 'str'>. [CSV Line number: 3]

注意,除了告诉错误是什么,dataclassreader还将显示csv文件的哪一行包含有错误的数据。

默认值

dataclassreader也处理具有默认值的属性。让我们修改dataclassuser并为字段email添加默认值:

pipenv install dataclass-csv
0

我们修改csv文件并删除用户astor的电子邮件:

pipenv install dataclass-csv
1

如果运行代码,我们将看到下面的输出:

pipenv install dataclass-csv
2

请注意,现在用户astor的对象具有未指定的默认值分配给电子邮件属性。

也可以使用dataclasses.field设置默认值,如下所示:

pipenv install dataclass-csv
3

将数据类字段映射到列

如果名称匹配,则将自动完成数据类属性与csv文件中的列之间的映射,但是,在某些情况下,列的标题名称不同。我们可以很容易地告诉dataclassreader应该如何使用map方法来完成映射。假设我们有一个csv文件,其内容如下:

pipenv install dataclass-csv
4

注意,现在该列被称为first name而不是firstname

我们可以使用map方法,就像这样:

pipenv install dataclass-csv
5

现在,dataclassreader将知道如何从列first name中提取数据,并将其添加到to dataclass属性firstname

支持的类型批注

目前,dataclassreader支持intstrfloatcomplexdatetimebool。定义datetime属性时,需要使用dateformat装饰符,例如:

pipenv install dataclass-csv
6

假设csv文件包含以下内容:

pipenv install dataclass-csv
7

输出如下:

pipenv install dataclass-csv
8

字段元数据

需要注意的是,date formatdecorator将定义用于将日期解析为所有属性的日期格式 在课堂上。现在,在某些情况下,csv文件中的数据包含两个或多个具有不同格式的日期值的列。这是可能的 使用dataclasses.field为每个属性设置特定的格式。假设我们现在有一个csv文件,其内容如下:

pipenv install dataclass-csv
9

如您所见,创建日期也包含时间信息。

数据类用户的定义如下:

fromdataclassesimportdataclassfromdataclass_csvimportDataclassReader
0

请注意,生日字段的格式不是使用字段元数据指定的。在这种情况下,在dateformat中指定的格式 将使用装饰器。

处理带有空格的值

当在dataclass中定义str类型的属性时,dataclassreader会将只有空格的值视为无效。改变这个 行为中,有一个名为@accept_whitespaces的装饰符。用@accept_空格装饰类时类中的所有属性 将只接受带有空格的值。

例如:

fromdataclassesimportdataclassfromdataclass_csvimportDataclassReader
1

如果需要特定字段来接受空白,可以在字段的元数据中设置属性accept_white spaces,如下所示:

fromdataclassesimportdataclassfromdataclass_csvimportDataclassReader
2

版权和许可

版权所有(c)2018丹尼我是费塔朵。根据BSD 3条款许可证发布的代码

学分

这个包是用cookiecutter和项目模板创建的。

历史记录

0.1.0(2018-11-25)

  • pypi上的第一个版本。

0.1.1(2018-11-25)

  • 文档修复。

0.1.2(2018-11-25)

  • 文档修复。

0.1.3(2018-11-26)

  • 错误修复
  • 删除了将数据类init设置为true的要求

0.1.5(2018-11-29)

  • 支持分析日期时间值。
  • 当默认值设置为none

0.1.6(2018-12-01)

  • dataclasses.field的default属性中添加了对读卡器默认值的支持
  • 添加了对在类级别上使用@accept_white spacesdecorator或通过dataclasses.field元数据只允许带有空格的字符串值的支持。
  • 添加了对使用dataclasses.field元数据指定日期格式的支持。

0.1.7(2018-12-01)

  • 添加了对字段元数据中default_factory中默认值的支持。这允许向数据类属性添加可变的默认值。

1.0.0(2018-12-16)

  • 当数据未通过验证时,它会显示CSV文件中包含错误的行号。
  • 改进了错误处理。
  • 更改了@accept_whitespaces装饰符的用法。
  • 更新文档。

1.0.1(2019-01-29)

  • 修复了分析带有尾随空格的csv文件头时出现的问题。

1.1.0(2019-02-17)

  • 增加了对布尔值的支持。
  • 文档字符串

1.1.1(2019-02-17)

  • 文档修复。

1.1.2(2019-02-17)

  • 文档修复。

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

推荐PyPI第三方库


热门话题
java如何通过Intellij的查找功能替换整行代码?   java如何根据语言选择Url?   Java泛型方法无法调用约束更宽松的另一个泛型方法并返回其值   java操作JComboBox   java搜索两个字段匹配的记录   Java中的跳跃算法   用于在对象上添加/删除功能的java范例   java什么是com类文件的修复程序。谷歌。常见的基础找不到谓词?   这个算法的时间复杂度是多少   如何在forEach中执行操作并在Java流中将其传递给groupingBy   在java web应用程序中集成mahout推荐引擎时出现异常   java如何为Alfresco构建metawriter bean?   java循环的最长回文子序列   java如何配置Jitsimeet录制?   为什么java ToCharray语句有时才起作用?   java dependsOnGroups顺序orderTestng   java如何将对象转换为bean   安卓 studio中的java ArrayList<Event>结果大小为0