1. Python基础教程
  2. 在SublimeEditor中配置Python环境
  3. Python代码中添加注释
  4. Python中的变量的使用
  5. Python中的数据类型
  6. Python中的关键字
  7. Python字符串操作
  8. Python中的list操作
  9. Python中的Tuple操作
  10. Pythonmax()和min()–在列表或数组中查找最大值和最小值
  11. Python找到最大的N个(前N个)或最小的N个项目
  12. Python读写CSV文件
  13. Python中使用httplib2–HTTPGET和POST示例
  14. Python将tuple开箱为变量或参数
  15. Python开箱Tuple–太多值无法解压
  16. Pythonmultidict示例–将单个键映射到字典中的多个值
  17. PythonOrderedDict–有序字典
  18. Python字典交集–比较两个字典
  19. Python优先级队列示例

学习在Python中使用CSV文件。CSV(逗号分隔值)格式是电子表格和数据库中非常流行的导入和导出格式。Python语言包含该模块,该模块具有用于读取和写入CSV格式的数据的类。csv

目录

使用csv.reader()

读取CSV文件使用csv.DictReader读取CSV

文件使用csv.writer()写入CSV文件

引用

CSV方言

自定义CSV方言

Reading CSV file with csv.reader()

csv.reader()方法返回一个reader对象,该对象将遍历给定CSV文件中的行。

假设我们有以下numbers.csv包含数字的文件:

6,5,3,9,8,6,7

以下python脚本从此CSV文件读取数据。

#!/usr/bin/python3

import csv
f = open('numbers.csv', 'r')
with f:
reader = csv.reader(f)
for row in reader:
print(row)

在上面的代码示例中,我们打开了numbers.csv以读取并使用csv.reader()方法加载数据。

现在,假设CSV文件将使用其他定界符。(严格来说,这不是CSV文件,但是这种做法很常见。)例如,我们有以下items.csv文件,其中的元素由竖线字符(|)分隔:

pen|table|keyboard

以下脚本从items.csv文件读取数据。

#!/usr/bin/python3

import csv
f = open('items.csv', 'r')
with f:
reader = csv.reader(f, delimiter="|")
for row in reader:
for e in row:
print(e)

我们delimiter在csv.reader()方法中使用参数指定新的分隔字符。

Reading CSV file with csv.DictReader

csv.DictReader班的运作就像一个普通的读者,但读入字典中的信息映射

字典的键可以与fieldnames参数一起传递,也可以从CSV文件的第一行推断出来。

我们有以下values.csv文件:

min, avg, max
1, 5.5, 10

第一行代表字典的键,第二行代表值。

#!/usr/bin/python3

import csv
f = open('values.csv', 'r')
with f:
reader = csv.DictReader(f)
for row in reader:
print(row)

上面的python脚本使用读取values.csv文件中的值csv.DictReader。

这是示例的输出。

$ ./read_csv3.py
{' max': ' 10', 'min': '1', ' avg': ' 5.5'}

Writing CSV file using csv.writer()

csv.writer()方法返回一个writer对象,该对象负责将用户数据转换为给定文件状对象上的定界字符串。

#!/usr/bin/python3

import csv
nms = [[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12]]
f = open('numbers2.csv', 'w')
with f:
writer = csv.writer(f)
for row in nms:
writer.writerow(row)

该脚本将数字写入numbers2.csv文件。该writerow()方法将一行数据写入指定的文件。

该脚本将产生以下文件(numbers2.csv):

1,2,3,4,5,6 7,8,9,10,11,12

可以一次写入所有数据。该writerows()方法将所有给定的行写入CSV文件。

下一个代码示例将Python列表写入numbers3.csv文件。该脚本将三行数字写入文件。

#!/usr/bin/python3

import csv
nms = [[1, 2, 3], [7, 8, 9], [10, 11, 12]]
f = open('numbers3.csv', 'w')
with f:
writer = csv.writer(f)
writer.writerows(nms)

运行上述程序时,以下输出将写入numbers3.csv文件:

1,2,3 7,8,9 10,11,12

Quoting

可以在CSV文件中引用单词。Python CSV模块中有四种不同的引用模式

  • QUOTE_ALL —引用所有字段
  • QUOTE_MINIMAL-仅引用那些包含特殊字符的字段
  • QUOTE_NONNUMERIC —引用所有非数字字段
  • QUOTE_NONE —不引用字段

在下一个示例中,我们向items2.csv文件写入三行。所有非数字字段都用引号引起来。

#!/usr/bin/python3

import csv
f = open('items2.csv', 'w')
with f:
writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC)
writer.writerows((["coins", 3], ["pens", 2], ["bottles", 7]))

该程序将创建以下items2.csv文件。引用项目名称,不引用数字表示的数量。

"coins",3
"pens",2
"bottles",7

CSV Dialects

尽管CSV格式是一种非常简单的格式,但还是有许多差异,例如不同的定界符,换行或引号字符。因此,有不同的CSV方言可用。

下一个代码示例将打印可用的方言及其特征。

#!/usr/bin/python3

import csv
names = csv.list_dialects()
for name in names:
print(name)
dialect = csv.get_dialect(name)
print(repr(dialect.delimiter), end=" ")
print(dialect.doublequote, end=" ")
print(dialect.escapechar, end=" ")
print(repr(dialect.lineterminator), end=" ")
print(dialect.quotechar, end=" ")
print(dialect.quoting, end=" ")
print(dialect.skipinitialspace, end=" ")
print(dialect.strict)

在csv.list_dialects()返回方言名称的列表和csv.get_dialect()方法返回与方言名称相关联的方言。

$ ./dialects.py
excel
',' 1 None '\r\n' " 0 0 0
excel-tab
'\t' 1 None '\r\n' " 0 0 0
unix
',' 1 None '\n' " 1 0 0

程序将打印此输出。有三个内置的方言excel,excel-tab和unix。

Custom CSV Dialect

在本教程的最后一个示例中,我们将创建一个自定义方言。使用该csv.register_dialect()方法创建自定义方言。

#!/usr/bin/python3

import csv
csv.register_dialect("hashes", delimiter="#")
f = open('items3.csv', 'w')
with f:
writer = csv.writer(f, dialect="hashes")
writer.writerow(("pencils", 2))
writer.writerow(("plates", 1))
writer.writerow(("books", 4))

该程序使用(#)字符作为分隔符。使用方法中的dialect选项指定方言csv.writer()。

该程序将产生以下文件(items3.csv):

pencils#2
plates#1
books#4

在本教程中,我们探索了Python csv模块,并介绍了一些在python中读写CSV文件的示例。

学习愉快!

(Python基础教程之十二)Python读写CSV文件的更多相关文章

  1. 倍福TwinCAT(贝福Beckhoff)基础教程4.2 TwinCAT如何读写CSV文件

    本程序只是在官方范例程序上稍作修改,在官方原有的范例中,演示了多种模式的读写(可以认为CSV文件是比TXT文件需要更多数据量的时候使用,比如记录一个小型的数据库集合)   但是写的比较混乱,甚至没有H ...

  2. (Python基础教程之十三)Python中使用httplib2 – HTTP GET和POST示例

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  3. Python基础笔记系列十二:requests模块的简单应用

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! httpbin httpbin这个网站能测试 HTTP 请求和响应的各种信 ...

  4. python基础教程(十)

    魔法方法.属性 ------------------------ 准备工作 为了确保类是新型类,应该把 _metaclass_=type 入到你的模块的最开始. class NewType(Objec ...

  5. Python基础教程总结(二)

    上周总结了一下Python的一些基本数据类型和用法.这次总结一下4-9章的内容,完后,赶紧学以致用吧. 5. 第四章——字典:当索引不好用时 字典是Python中唯一内建的映射类型.字典中的值并没有特 ...

  6. python基础学习(十二)

    模块 前面有简单介绍如何使用import从外部模块获取函数并且为自己的程序所用: >>> import math >>> math.sin(0) #sin为正弦函数 ...

  7. python基础学习(十二)变量进阶

    目录 1. 变量的引用 1.1 引用的概念 1.2 变量引用 的实例 1.3 函数的参数和返回值的传递 2. 可变和不可变类型 哈希 (hash) 3. 局部变量和全局变量 3.1 局部变量 3.2 ...

  8. Python核心技术与实战——十二|Python的比较与拷贝

    我们在前面已经接触到了很多Python对象比较的例子,例如这样的 a = b = a == b 或者是将一个对象进行拷贝 l1 = [,,,,] l2 = l1 l3 = list(l1) 那么现在试 ...

  9. Python基础教程(009)--Python程序的格式以及扩展名

    前言: 熟悉编写第一个Python程序 内容 1,Python源程序是一个特殊的文本文件.可以使用任意文本编辑软件做Python开发 2,Python程序的文件扩展名都是.py 熟悉了解: 看到.py ...

随机推荐

  1. SpringCloud(六)学习笔记之Zuul

    Zuul 在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架.Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门 Hystrix+Ribbon(不使用Feign) ...

  2. 云开发静态网站托管现已支持 Angular 应用

    云开发静态托管是云开发提供的静态网站托管的能力,静态资源(HTML.CSS.JavaScript.字体等)的分发由腾讯云对象存储 COS 和拥有多个边缘网点的腾讯云 CDN 提供支持. 在云开发静态托 ...

  3. MVC-过滤器-Action

    四个方法执行顺序是OnActionExecuting——>OnActionExecuted——>OnResultExecuting——>OnResultExecuted. demo代 ...

  4. React Hooks: useCallback理解

    useCallback把匿名回调“存”起来 避免在component render时候声明匿名方法,因为这些匿名方法会被反复重新声明而无法被多次利用,然后容易造成component反复不必要的渲染. ...

  5. 关于暴力破解的一些学习笔记(pikachu)

    这几天的笔记都懒得发博客都写在本地了,随缘搬上来 什么是暴力破解 就是在攻击者不知道目标账号密码情况下的,对目标系统的常识性登陆 一般会采用一些工具+特定的字典 来实现高效的连续的尝试性登陆 一个有效 ...

  6. 查看 Nginx 的日志目录

    即便是 docker 容器,对应的目录也是一样的 > /var/log/nginx/xxx.log

  7. 【Linux常见命令】ip命令

    ip命令是用来配置网卡ip信息的命令,且是未来的趋势,重启网卡后IP失效. ip - show / manipulate routing, devices, policy routing and tu ...

  8. webpack打包多入口配置

    在它的entry入口设置多文件入口即可,例: entry: { core: './src/core.js', design: './src/design.js' }, 单一出口输出: output: ...

  9. iterm2终端manpage高亮显示

    iterm2 据说是macOS平台上最好用的终端工具,今天下载来用了一下,发现确实很好.但是在使用man命令显示manpage的时候,颜色配置不是很让人满意,就像下面这样: 其实这样也是不错的,但是用 ...

  10. uniq 只能相邻行去重

    uniq只可以将相邻行重复数据进行去重处理: [root@localhost /data/mysql/mysql3306]#last | cut -d ' ' -f 1 | tail -15 > ...