1. CSV文件格式是什么

CSV有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。

Elixir有好几个CSV处理的库(cessocsvcsvlixirex_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

1.beatrichartz/csv

2. igas/faker


How I felt when I understood Elixir error messages for the first time

[Elixir006]CSV(Comma-separated values)处理的更多相关文章

  1. python开发_csv(Comma Separated Values)_逗号分隔值_常用导入导出格式_完整版_博主推荐

    ## 最近出了一趟差,是从20号去的,今天回来...# 就把最近学习的python内容给大家分享一下...#''' 在python中,CSV(Comma Separated Values),从字面上面 ...

  2. Eclipse中出现无法找到Maven包Active Maven Profiles (comma separated)

    Eclipse中出现无法找到Maven包 2014年02月25日 16:51:30 阅读数:13057     症状:出现org.maven.ide.eclipse.MAVEN2_CLASSPATH_ ...

  3. Python操作csv文件

    1.什么是csv文件 The so-called CSV (Comma Separated Values) format is the most common import and export fo ...

  4. 支持各种特殊字符的 CSV 解析类 (.net 实现)(C#读写CSV文件)

    CSV是一种十分简洁的数据结构,在DOTNET平台实际使用中发现微软官方并没有提供默认的方法,而网上好多例子发现实现并不严谨甚至一些含有明显错误,所以后面自己实现了一个读写工具类,这里发出来希望方便后 ...

  5. Python 读取csv的某行

    站长用Python写了一个可以提取csv任一列的代码,欢迎使用.Github链接 csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: 就可以存 ...

  6. python处理csv文档

    在工作中遇到了使用python解析csv文件的问题,包括读写操作,下面参考官网文档,进行一下总结: 首先CSV (Comma Separated Values) ,也就是逗号分开的数值,可以用Note ...

  7. django 动态生成CSV文件

    CSV (Comma Separated Values),以纯文本形式存储数字和文本数据的存储方式.纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样的数据.CSV文件由任意数目的记录组成,记 ...

  8. CSV 文件

    CSV 文件 CSV(Comma Separated Values 逗号分隔值) 是一种文件格式(如.txt..doc等),也可理解 .csv 文件就是一种特殊格式的纯文本文件.即是一组字符序列,字符 ...

  9. Python csv模块的使用

    1.csv简介 CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本 格式,用以存储表格数据,包括数字或者字符.很多程序在 ...

随机推荐

  1. 面试总结之Linux/Shell

    Linux Linux cshrc文件作用 Linux如何起进程/查看进程/杀进程 Linux 文件755 代表什么权限 Linux辅助线程 Linux进程间通信方法 pipeline,msgq... ...

  2. spring RestTemplate用法详解

    spring RestTemplate用法详解 spring 3.2.3 框架参考有说明 21.9 Accessing RESTful services on the Client

  3. 解决Maven出现Plugin execution not covered by lifecycle configuration 错误

    http://blog.163.com/xh_ding/blog/static/1939032892015222368827/ 解决Maven出现Plugin execution not covere ...

  4. Sql Server-使用Sql Server自带的分词功能实现字段关键词提取(分词能力很低,慎用)

    “创建全文索引 启动服务 在SQL Server配置管理工具中,找到'SQL Full-text Filter Daemon Launcher'服务用本地用户启动. 创建全文目录 打开需要创建全文目录 ...

  5. 交叉编译OpenCV的Android版本

    交叉编译OpenCV的Android版本 OpenCV作为一个强大的图像处理库,在Android上也有强大的应用. OpenCV官网提供了SDK的下载,可以直接下载使用 OpenCV官网地址:http ...

  6. 32_java之TCP和UDP

    01网络模型 *A:网络模型 TCP/IP协议中的四层分别是应用层.传输层.网络层和链路层,每层分别负责不同的通信功能,接下来针对这四层进行详细地讲解. 链路层:链路层是用于定义物理传输通道,通常是对 ...

  7. 关于常见的协议BSD,APACHE,MIT,GPL的理解

    其实BSD和APACHE和MIT协议类似,基本就是可以为所欲为,但是要尊重原来的作者. GPL协议是一个免费和开源的协议,只要用了GPL协议的类库源码等,也必须适应GPL协议. 意思就是把开源和免费进 ...

  8. RAD C++Builder xe7 std::map xtree BUG

    c++Builder 6 下的std::map还能用,有代码提示. 换到xe7,代码提示出来就一个tt.operator [](),代码没法往下写了. 最后把Target Platforms切换到64 ...

  9. 使用phpexcel导出到xls文件的时候出现乱码解决

    <?php include 'global.php'; $ids = $_GET['ids']; $sql = "select * from crm_cost_end where id ...

  10. libcurl使用心得-包括下载文件不存在处理相关(转)

    libcurl使用心得 Libcurl为一个免费开源的,客户端url传输库,支持FTP,FTPS,TFTP,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE和LDAP,跨平台,支持 ...