将csv数据文件夹到数据类中
dataclass-csv的Python项目详细描述
数据类csv
数据类csv使使用csv文件比使用dict更容易和更好。它使用python的数据类来存储csv文件中每一行的数据,并且还使用类型注释来实现正确的类型检查和验证。
主要功能
- 使用数据类而不是字典来表示csv文件中的行。
- 利用
dataclass
properties类型注释。dataclassreader
使用类型注释对csv文件的数据执行验证。 - 自动类型转换。
dataclassreader
支持str
,int
,float
,complex
,datetime
和bool
- 帮助您解决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个属性,firstname
和email
属于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-csv0
我们修改csv文件并删除用户astor的电子邮件:
pipenv install dataclass-csv1
如果运行代码,我们将看到下面的输出:
pipenv install dataclass-csv2
请注意,现在用户astor的对象具有未指定的默认值分配给电子邮件属性。
也可以使用dataclasses.field
设置默认值,如下所示:
pipenv install dataclass-csv3
将数据类字段映射到列
如果名称匹配,则将自动完成数据类属性与csv文件中的列之间的映射,但是,在某些情况下,列的标题名称不同。我们可以很容易地告诉dataclassreader
应该如何使用map
方法来完成映射。假设我们有一个csv文件,其内容如下:
pipenv install dataclass-csv4
注意,现在该列被称为first name而不是firstname
我们可以使用map方法,就像这样:
pipenv install dataclass-csv5
现在,dataclassreader将知道如何从列first name中提取数据,并将其添加到to dataclass属性firstname
支持的类型批注
目前,dataclassreader
支持int
,str
,float
,complex
,datetime
和bool
。定义datetime
属性时,需要使用dateformat
装饰符,例如:
pipenv install dataclass-csv6
假设csv文件包含以下内容:
pipenv install dataclass-csv7
输出如下:
pipenv install dataclass-csv8
字段元数据
需要注意的是,date format
decorator将定义用于将日期解析为所有属性的日期格式
在课堂上。现在,在某些情况下,csv文件中的数据包含两个或多个具有不同格式的日期值的列。这是可能的
使用dataclasses.field
为每个属性设置特定的格式。假设我们现在有一个csv文件,其内容如下:
pipenv install dataclass-csv9
如您所见,创建日期也包含时间信息。
数据类
用户的定义如下:
fromdataclassesimportdataclassfromdataclass_csvimportDataclassReader0
请注意,生日
字段的格式不是使用字段
元数据指定的。在这种情况下,在dateformat
中指定的格式
将使用装饰器。
处理带有空格的值
当在dataclass
中定义str
类型的属性时,dataclassreader
会将只有空格的值视为无效。改变这个
行为中,有一个名为@accept_whitespaces
的装饰符。用@accept_空格装饰类时
类中的所有属性
将只接受带有空格的值。
例如:
fromdataclassesimportdataclassfromdataclass_csvimportDataclassReader1
如果需要特定字段来接受空白,可以在字段的元数据中设置属性accept_white spaces
,如下所示:
fromdataclassesimportdataclassfromdataclass_csvimportDataclassReader2
版权和许可
版权所有(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 spaces
decorator或通过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)
- 文档修复。