(Python基础教程之十二)Python读写CSV文件

  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文件的示例。

学习愉快!

作者:分布式编程
出处:https://zthinker.com/
如果你喜欢本文,请长按二维码,关注 分布式编程
.

分布式编程

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342