python语言---------------csv模块介绍

【实用】关于Python网络运维自动化——CSV

哈喽,大家好,我又来了。见字如面,每篇锤炼!近期有一篇,我介绍了JSON这种信息储存方式,【实用】关于Python网络运维自动化——JSON。该文章的阅读量远超我的想象,这让我有点振奋也有点诧异。其实呢,技术类或实验类的文章,我是更喜欢写在知乎平台上的,因为知乎文章可以反复调整打磨。考虑到微信公众号文章一经发布便很难修改,我则多以思考感悟类为主。最近我也有同一些读者朋友交流,大家反馈微信公众号对日常阅读更方便,有点口袋书的感觉,毕竟大家不一定安装知乎APP,但是一定会安装微信APP。

好吧,那我也考虑陆续把一些在知乎平台上打磨过的文章,整理定稿后再发到微信公众号平台上。当然,这非一文双发或一文多发,传递到公众号的文章自然会加多一些见解与感悟。今晚就着上次提及的信息存储媒介,我们来聊聊CSV吧,稍作梳理,分享于你!

 

CSV特点

网络工程师敲指令也好,践行Python自动化也好,或许,我们最开始接触到的是字符串,进而是存放特定字符串的TXT文件。慢慢地,我们会觉得字符串文本似乎对人眼比较友好,而对机器解读不是很友好。换句话说,一行符号,你看懂了,机器则很难“看懂”。如何规范化呢?我们就在字符串中进行断句操作,比如一个特定文本,我们使用逗号进行文本切割。(当然,也可以使用其它符号来做分隔符。)这与文言文断句有点异曲同工之妙,现代人通过断句加标点符号的方式,让古文更容易理解些。当我们把字符串文本进行处理后,无非就是人容易读一点,机器容易识别处理一些。在此基础上,信息又得以保存,还方便运输。于是,CSV格式运营而生。如果我没记错的话,它的出现要比JSON等格式早很多。

CSV的名称由来非常简单粗暴,comma-separated value,见名知意,即逗号隔开的数据。一个文本,加上逗号,本质上还是文本。但正因为这有规律的逗号,这种数据我们可以从表格中获取,也可以从数据库中获取。它与表格攀上关系之后,马上对接办公软件(如EXCEL),甚至可以拉通数据库。按照喝茶饮酒品咖啡的套话,这玩意儿马上具有了层次感,也可以说成格局打开了。

或许,你我都未曾想过,CSV竟然是由RFC定义和解释的。我们稍加浏览后,便知道了CSV并没有通用的格式和标准,RFC 4180 仅仅给出了一个框架性的基础描述而已。这样,不同组织在CSV的开发实现上,就会有不同的理解,在比较灵活的同时,便不可避免的会带来一些麻烦,比如编码差异导致的乱码问题。这里我们点到为止,不展开。

https://www.rfc-editor.org/rfc/rfc4180.html

图片

 

读取CSV

我们准备一个小DEMO,将如下一段文本保存成csv_test_read1.csv。我们可以使用记事本工具来打开和编辑这份CSV文件。

hostname,vendor,model,locationsw1,Huawei,5700,Beijingsw2,Huawei,3700,Shanghaisw3,Huawei,9300,Guangzhousw4,Huawei,9306,Shenzhensw5,Huawei,12800,Hangzhou

在Python的标准库中,有一个专门处理CSV文件的模块,开箱即用。在实验文件夹中,将如下Python脚本保存为csv_test_read1.py文件。

import csv
#csv_path = r'E:\***\csv_test_read1.csv' # 文件路径,可根据自己实际情况。
csv_path = r'.\csv_test_read1.csv' # 文件路径,可根据自己实际情况。
with open(csv_path) as f: reader = csv.reader(f) for row in reader:        print(row)

脚本运行,结果如下。

图片

 

有了CSV工具的加持,传统的字符串文本马上能纳入Python生态。它可以将数据切割后装入容器(如列表,字典等),还可以配合Python分支、循环等再进一步加工数据。

看回代码中的变量reader,它实际是一个迭代器。倘若需要把表头(第一行)给单独拎出来,我们可以配合next()函数。此外,迭代器和list()函数结合,往往也会有妙用,如何实现呢?请读者朋友们自行尝试。(文末有链接介绍。)

 

写入CSV

读取实现了,现在我们开始尝试写入,其操作过程正好相反。在实验文件夹中,将如下Python脚本保存为csv_test_write1.py文件。

import csvdata = [['hostname','vendor','model','location'],  ['sw1','Huawei','5700','Beijing'],  ['sw2','Huawei','3700','Shanghai'],  ['sw3','Huawei','9300','Guangzhou'],  ['sw4','Huawei','9306','Shenzhen'],  ['sw5','Huawei','12800','Hangzhou']]
csv_path = r'.\csv_test_write1.csv' # 文件路径,可根据自己实际情况进行调整。with open(csv_path,'w',newline='') as f: writer = csv.writer(f) for row in data:        writer.writerow(row)

Python代码简单运行,则马上会得到一份CSV文件。我们可以使用excel打开,也可以使用记事本打开。

图片

相对于读取,写入还有更多“花俏”操作,比如文本本身带逗号如何写入(参数quoting),多行形式如何写入(方法writerows),字典形式如何写入(方法DictWriter)等。甚至,我们可以用delimiter参数来控制分隔符是逗号还是其它,比如冒号。更多“花俏”操作,请读者朋友们先自行尝试。实现后或实在没头绪可参考比较我如下知乎文章。

《网络工程师Python数据存储(第1节,CSV文件)》(将保持更新)https://zhuanlan.zhihu.com/p/456223197

 实现如下:

 

 

 

文末总结

有时候我会思考,网络工程师践行Python自动化过程,就拿CSV工具来说,我们刚开始可先用笨办法学习和实践,比如读取就先练熟一种方法,写入也就先练熟一种方法,其它“花俏”略带技巧类的知识,暂时后置,待我们基础稍微夯实以后再逐步尝试。或许这样,我们不至于一下子眼花缭乱难以锚定具体方法,毕竟产生效能才是目的。

JSON也好,CSV也好;无论Python数据类型,还是信息储存格式,甚至一切对象(Python一切皆对象),我想我们学习的思路无外乎“增删改查”四个字。请你品品看是否如此。接着,我们找到一个锚定点,最小化启动,从而切入学习和使

 
 
关注后可发消息
 
 
 
posted @ 2023-08-31 14:28  往事已成昨天  阅读(189)  评论(0编辑  收藏  举报