[Elixir006]CSV(Comma-separated values)处理
1. CSV文件格式是什么
CSV有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。
Elixir有好几个CSV处理的库(cesso, csv, csvlixir, ex_csv), beatrichartz/cvs写得特别好,用了stream, test coverage(100%),而且有benchmark.
mix new csv_play
cd csv_play
emacs mix.exs
defp deps do
[{:csv, "~> 1.2.0"},
{:faker, "~>0.5.1"}
]
end
2. Faker测试数据
faker用来假造一些测试数据,接下来我们搞一个脚本生成csv数据
mix deps.get
mkdir scripts
emacs scripts/generate_csv_data.exs
Faker.start
count = 10_000
headers = ~w(name company city) data = 1..count
|> Enum.map(fn(_) ->
[Faker.Name.first_name <> Faker.Name.last_name, Faker.Company.name, Faker.Address.city]
end) file = File.open!("sample_data.csv", [:write]) [headers | data]
|> CSV.encode
|> Enum.each(&IO.write(file, &1)) :ok = File.close(file)
mix run scripts/generate_csv_data.exs
3.CSV decode示例
我们来测试一下csv的header读得是否正确
mkdir test/data/
mv sample_data.csv test/data/
emacs test/csv_play_test.exs
defmodule CsvPlayTest do
use ExUnit.Case
@data_path "test/data/sample_data.csv" test "reading CSV as a list" do
list =
@data_path
|> File.stream!
|> CSV.decode
|> Enum.to_list
assert hd(list) == ["name", "company", "city"]
end
end
通常我们的cvs数据量都是非常大的,所以我们使用stream一块一块的来处理成map。
test "reading CSV as a map" do
list = @data_path
|> File.stream!
|> CSV.decode(headers: true)
|> Enum.to_list sorted_keys = list
|> hd
|> Map.keys
|> Enum.sort assert sorted_keys == Enum.sort(["name", "company", "city"])
end
当然你CSV decode时还可以指定分割符是什么(默认就是上面这种形式的逗号)
CSV.decode(separator: ?\t)
Resources
2. igas/faker
How I felt when I understood Elixir error messages for the first time

[Elixir006]CSV(Comma-separated values)处理的更多相关文章
- python开发_csv(Comma Separated Values)_逗号分隔值_常用导入导出格式_完整版_博主推荐
## 最近出了一趟差,是从20号去的,今天回来...# 就把最近学习的python内容给大家分享一下...#''' 在python中,CSV(Comma Separated Values),从字面上面 ...
- Eclipse中出现无法找到Maven包Active Maven Profiles (comma separated)
Eclipse中出现无法找到Maven包 2014年02月25日 16:51:30 阅读数:13057 症状:出现org.maven.ide.eclipse.MAVEN2_CLASSPATH_ ...
- Python操作csv文件
1.什么是csv文件 The so-called CSV (Comma Separated Values) format is the most common import and export fo ...
- 支持各种特殊字符的 CSV 解析类 (.net 实现)(C#读写CSV文件)
CSV是一种十分简洁的数据结构,在DOTNET平台实际使用中发现微软官方并没有提供默认的方法,而网上好多例子发现实现并不严谨甚至一些含有明显错误,所以后面自己实现了一个读写工具类,这里发出来希望方便后 ...
- Python 读取csv的某行
站长用Python写了一个可以提取csv任一列的代码,欢迎使用.Github链接 csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: 就可以存 ...
- python处理csv文档
在工作中遇到了使用python解析csv文件的问题,包括读写操作,下面参考官网文档,进行一下总结: 首先CSV (Comma Separated Values) ,也就是逗号分开的数值,可以用Note ...
- django 动态生成CSV文件
CSV (Comma Separated Values),以纯文本形式存储数字和文本数据的存储方式.纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样的数据.CSV文件由任意数目的记录组成,记 ...
- CSV 文件
CSV 文件 CSV(Comma Separated Values 逗号分隔值) 是一种文件格式(如.txt..doc等),也可理解 .csv 文件就是一种特殊格式的纯文本文件.即是一组字符序列,字符 ...
- Python csv模块的使用
1.csv简介 CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本 格式,用以存储表格数据,包括数字或者字符.很多程序在 ...
随机推荐
- Partition does not start on physical sector boundary
今天给一块硬盘分区,用fdisk按照默认步骤执行,遇到这个问题: [root@bogon ~]# fdisk /dev/sdfDevice contains neither a valid DOS p ...
- JAVA中方法和变量在继承中的覆盖和隐藏(一)
我们知道,在JAVA中,子类可以继承父类,如果子类声明的方法与父类有重名的情况怎么办,大伙儿都知道要是重写,但是实际上这又分为两种情况,就是方法和变量在继承时的覆盖和隐藏问题,这些概念性的东西看似无聊 ...
- Tomcat中部署网站和绑定域名
在安装的tomcat的文件夹下有个conf文件夹 下面有个server.xml文件, 1. 使用80端口 默认tomcat用的是8080端口. <Connector port="808 ...
- 精《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #5 使用checkpatch.pl检查补丁的格式
HACK #5 使用checkpatch.pl检查补丁的格式 本节介绍发布前检查补丁格式的方法.Linux内核是由多个开发者进行开发的.因此,为了保持补丁评估与源代码的可读性,按照统一的规则进行编写是 ...
- (转)Chrome开发者工具不完全指南(一、基础功能篇)
本篇转载自卖烧烤夫斯基,并做了小部分的修改. 原文地址:Chrome开发者工具不完全指南(一.基础功能篇) 原作者:卖烧烤夫斯基 就算你不是一名前端开发工程师,相信你也不会对Chrome浏览器感到陌生 ...
- 529. Minesweeper
▶ 扫雷的扩展判定.已知棋盘上所有点的情况(雷区 'M',已翻开空白区 'B',未翻开空白区 'E',数字区 '1' ~ '8'),现在给定一个点击位置(一定在空白区域),若命中雷区则将被命中的 M ...
- jeesite快速开发平台(一)----简介
转自:https://blog.csdn.net/u011781521/article/details/54880170
- 读取Excel里面的内容转为DataTable
using System; using System.Collections.Generic; using System.Data; using System.Data.OleDb; using Sy ...
- CPU GPU FPU TPU 及厂商
1,AMD 既做CPU又做显卡2,Inter 全球最大的CPU厂商,GPU,FPGA3,NVIDA 人工智能起家的公司,且一直在做,显卡最出名,CUDA让N卡胜了AMD CPU上 AMD - Inte ...
- LMAX系统架构
本文转载自:LMAX系统架构 ,(非常感谢作者yfx416分享好文) 很多架构师都面临这么一个问题:如何设计一个高吞吐量,低延时的系统?面对这个问题,各位都有自己的答案.但面对这个问题,大家似乎渐渐形 ...