CSV

csv文件格式是一种通用的电子表格和数据库导入导出格式

简介

Python csv模块封装了常用的功能,使用的简单例子如下:

写入

# 写入csv文件
import csv csvfile = open('csv_test.csv', 'w',newline='')
# 如果不指定newline='',有时则每写入一行将有一空行被写入
writer = csv.writer(csvfile)
writer.writerow(['姓名', '年龄', '电话']) # 写入一行用writerow data = [
('al', '25', '1367890900'),
('eg', '18', '1367890800')
]
writer.writerows(data) # 多行用writerows
csvfile.close()

读取

# 读取csv文件
csv_reader = csv.reader(open('csv_test.csv', encoding='utf-8'))
for row in csv_reader:
print(row) # ['姓名', '年龄', '电话']
# ['al', '25', '1367890900']
# ['eg', '18', '1367890800']

默认的情况下, 读和写使用逗号做分隔符(delimiter),用双引号作为引用符(quotechar),当遇到特殊情况是,可以根据需要手动指定字符, 例如:

import csv
with open('/etc/passwd', 'r') as f:
reader = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE)
for row in reader:
print(row) ['root', 'x', '0', '0', 'root', '/root', '/bin/bash']
['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin']
['daemon', 'x', '2', '2', 'daemon', '/sbin', '/sbin/nologin']
……

上述示例指定冒号作为分隔符,并且指定quote方式为不引用。这意味着读的时候都认为内容是不被默认引用符(")包围的。

quoting的可选项为: QUOTE_ALL, QUOTE_MINIMAL, QUOTE_NONNUMERIC, QUOTE_NONE.

有点需要注意的是,当用writer写数据时, None 会被写成空字符串,浮点类型会被调用 repr() 方法转化成字符串。所以非字符串类型的数据会被 str() 成字符串存储。

字典方式地读写

csv还提供了一种类似于字典方式的读写,方式如下:

格式如下:

headers = ['name', 'age']

datas = [{'name': 'Bob', 'age': 23},
{'name': 'Jerry', 'age': 44},
{'name': 'Tom', 'age': 15}
] with open('example.csv', 'w', newline='') as f:
# 标头在这里传入,作为第一行数据
writer = csv.DictWriter(f, headers)
writer.writeheader()
for row in datas:
writer.writerow(row) # 还可以写入多行
writer.writerows(datas) # 读
import csv
with open('example.csv','r') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row['name'], row['age'])
# name,age
# Bob,23
# Jerry,44
# Tom,15
# Bob,23
# Jerry,44
# Tom,15

案例:使用csv格式展示磁盘空间

import re
import csv
import os
from prettytable import from_csv
import subprocess
# 写入csv文件
import csv def cmd_exec(cmd):
"""
执行shell命令
返回命令返回值和结果
:param cmd:
:return:
"""
p = subprocess.Popen(cmd,
shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE) stdout, stderr = p.communicate() if p.returncode != 0:
return {'code':p.returncode, 'res':to_str(stderr)}
return {'code':p.returncode, 'res':to_str(stdout)} def to_str(bytes_or_str):
"""
把byte类型转换为str
:param bytes_or_str:
:return:
"""
if isinstance(bytes_or_str, bytes):
value = bytes_or_str.decode('utf-8')
else:
value = bytes_or_str
return value f = open('disk.csv', 'w+', newline='', encoding='utf-8' )
fieldnames = ['Dir', 'Use%', 'Avail', 'Used', 'Size']
writer = csv.writer(f)
writer.writerow(fieldnames)
df_ret = cmd_exec('df -h| grep -E \([1-9]?[1-9]\%\)\|\(100\%\)')
if df_ret['code'] == 0:
if df_ret['res']:
for item in df_ret['res'].split('\n')[:-1]: # 截取回车
d = re.split(r'\s+', item) # 去除空格符
writer.writerow(d[-1:-6:-1])
f.flush() # 写入到磁盘
# os.fsync() 方法强制将文件描述符为fd的文件写入硬盘。在Unix, 将调用fsync()函数;在Windows, 调用 _commit()函数。
# 如果你准备操作一个Python文件对象f, 首先f.flush(),然后os.fsync(f.fileno()),
# 确保与f相关的所有内存都写入了硬盘.在unix,Windows中有效。
os.fsync(f.fileno())
f.seek(0) # 把文件指针置于开头
tb = from_csv(f)
### 设定左对齐
tb.align = 'l'
### 设定T_ID右对齐
tb.align["Use%"] = "r"
### 设定数字输出格式
tb.float_format = "2.2"
### 设定边框连接符为'*"
tb.junction_char = "*"
# ### 设定排序列
# tb.sortby = "Use%"
# ### 设定排序方式
# tb.reversesort = True
### 设定左侧不填充空白字符
tb.left_padding_width = 0
print(tb) # 打印表格 *---------*-----*------*-----*-----*
|Dir |Use% |Avail |Used |Size |
*---------*-----*------*-----*-----*
|/ | 11% |82G |9.3G |96G |
|/dev/shm | 1% |931M |72K |931M |
|/boot | 9% |421M |39M |485M |
*---------*-----*------*-----*-----*

  

  

Python--CSV模块的更多相关文章

  1. Python CSV模块简介

    Table of Contents 1. CSV 1.1. 简介 1.2. 字典方式地读写 1.3. 其它 2. 参考资料 CSV csv文件格式是一种通用的电子表格和数据库导入导出格式.最近我调用R ...

  2. python csv 模块的使用

    python csv 模块的使用 歌曲推荐:攀登(live) csv 是用逗号分隔符来分隔列与列之间的. 1. csv的写入 1.简单的写入,一次写入一行 import csv with open(& ...

  3. Python CSV模块处理文件读写

    下面是一个简单的csv文件 Title,Release Date,Director And Now For Something Completely Different,1971,Ian MacNau ...

  4. python csv模块的reader是一个迭代器,无法多次迭代

    在一个项目中,我需要多次遍历一个文本,该文本我是用csv.reader读取的.但后来发现,本文只对第一次循环有用,而之后的循环均为空白.经过排错后,我确定问题就出现在csv.reader()这一步.之 ...

  5. Python csv模块的使用

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

  6. CSV模块

    Python csv模块的使用 1.csv简介 CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本 格式,用以存储表格数 ...

  7. CSV模块的使用

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

  8. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

  9. Python中csv模块解析

    导入模块 import csv 2.读取csv文件 file1 = open('test1.csv', 'rb') reader = csv.reader(file1) rows = [row for ...

  10. Python之CSV模块

    1. CSV简介 CSV(Comma Separated Values)是逗号分隔符文本格式,常用于Excel和数据库的导入和导出,Python标准库的CSV模块提供了读取和写入CSV格式文件的对象. ...

随机推荐

  1. js保存,获取,删除cookie的操作

    [转]来自:http://blog.csdn.net/itmyhome1990/article/details/7363816 JSP表单页面 <form action="login& ...

  2. javaScript正则表达式的使用

    今天看了一个正则的写法,回想一下,对于正则都忘记得差不多了,称这个时间整理一下,收集了一些以前的资料和查看了一些别人的资料,做一个小小的总结,方便自己以后查看,也希望能帮助到大家!!   欢迎指正,欢 ...

  3. mysql 切换数据库方案

    业务场景 在SAAS模式下,不同的租户需要切换数据库,我们可以使用动态数据源,动态数据源有个问题,就是需要对每一个数据库创建一个连接池,在初始化的时候初始化这些连接池, 如果多台应用服务器的情况,每一 ...

  4. vue路由跳转的多种方式

    1.router-link to 跳转 <router-link to="/child"><button>跳转</button></rou ...

  5. oracle学习笔记一:用户管理(2)创建删除用户

    本文主要介绍如何创建和删除用户,当然里面牵涉很多知识,慢慢道来. 1,创建用户 需求:假设你是oracle管理员,当一个同事入职,你需要分配给一个账号. 创建用户,一般需要有相应权限的用户才可以创建用 ...

  6. nginx proxy_pass后的url加不加/的区别

    在nginx中配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走. 下面四种 ...

  7. redis for lack of backlog

    版本: redis-3.2.9 部署: 5台64G内存的物理机,每台机器启动2个redis进程组成5主5备集群,每台机器1个主1个备,并且错开互备. 问题: 发现redis进程占用内存高达40G,而且 ...

  8. TreeSet集合为什么要实现Comparable?

    首先,让我们来看看JDK中TreeSet类的add方法 /** * Adds the specified element to this set if it is not already presen ...

  9. 使用 alt_disk_copy 克隆 rootvg

    地址:http://www.ibm.com/developerworks/cn/aix/library/au-alt_disk_copy/ 简介 大多数系统管理员都遇到过以下情况: 一次 ML 升级失 ...

  10. 通过pip安装套件

    pip3 install requests pip3 install BeautifulSoup4   还需要使用jupyter: pip3 install jupyter 打开jupyterbook ...