Python--CSV模块
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模块的更多相关文章
- Python CSV模块简介
Table of Contents 1. CSV 1.1. 简介 1.2. 字典方式地读写 1.3. 其它 2. 参考资料 CSV csv文件格式是一种通用的电子表格和数据库导入导出格式.最近我调用R ...
- python csv 模块的使用
python csv 模块的使用 歌曲推荐:攀登(live) csv 是用逗号分隔符来分隔列与列之间的. 1. csv的写入 1.简单的写入,一次写入一行 import csv with open(& ...
- Python CSV模块处理文件读写
下面是一个简单的csv文件 Title,Release Date,Director And Now For Something Completely Different,1971,Ian MacNau ...
- python csv模块的reader是一个迭代器,无法多次迭代
在一个项目中,我需要多次遍历一个文本,该文本我是用csv.reader读取的.但后来发现,本文只对第一次循环有用,而之后的循环均为空白.经过排错后,我确定问题就出现在csv.reader()这一步.之 ...
- Python csv模块的使用
1.csv简介 CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本 格式,用以存储表格数据,包括数字或者字符.很多程序在 ...
- CSV模块
Python csv模块的使用 1.csv简介 CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本 格式,用以存储表格数 ...
- CSV模块的使用
1.csv简介 CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本 格式,用以存储表格数据,包括数字或者字符.很多程序在 ...
- Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块
Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函 ...
- Python中csv模块解析
导入模块 import csv 2.读取csv文件 file1 = open('test1.csv', 'rb') reader = csv.reader(file1) rows = [row for ...
- Python之CSV模块
1. CSV简介 CSV(Comma Separated Values)是逗号分隔符文本格式,常用于Excel和数据库的导入和导出,Python标准库的CSV模块提供了读取和写入CSV格式文件的对象. ...
随机推荐
- JSON.parse和JSON.stringify的区别
JSON.stringify()的作用是将 JavaScript 值转换为 JSON 字符串, 而JSON.parse()可以将JSON字符串转为一个对象. 简单点说,它们的作用是相对的,我用JSON ...
- 微信小程序请求数据
微信小程序请求数据,在页面展示,可以在onLoad生命周期中进行请求. 1.新建目录http,新建文件http.js 2.在js文件中暴露需要使用的变量 var baseUrl = 'http://1 ...
- ES6通过使用babel兼容到ie9
1.打开这个地址: https://unpkg.com/babel-standalone@6/babel.min.js 新建babel.min.js,把代码复制进去,然后在jq项目里引用. 2.在下面 ...
- vue+mui轮播图
mui的轮播图,如果图片是请求来的,直接在html中循环是不会动的. 需要请求完图片之后,在setTimeout方法里,使用slider()方法,这样才会动 而且mui的轮播图,有点坑的,需要重复最后 ...
- Win7 VS2015环境编译NanoVG
书接上回,Cairo编译好使用后,发现简单的每帧画100条随机线段就卡得不行,装了个gooreplacer( http://liujiacai.net/gooreplacer/ )上stackover ...
- MongoDB-环境搭建
1.下载并安装MongoDB服务 下载地址:mongodb-win32-x86_64-2008plus-ssl-3.2.8-signed 可直接运行mongod命令启动MongoDB服务器,也可以将M ...
- js,javascript,获取地址栏参数
function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*) ...
- 如何使用git管理代码
如何使用Git管理代码 Git 是开发人员用来向代码库(msstash)中提交代码或者下载远端代码库中代码的工具. 如何使用git向代码库中提交我们修改后的代码呢? 1.如果是第一次使用git,那么需 ...
- 20169207《Linux内核原理与分析》第三周作业
这周主要对于以往的知识进行了复习,包括开始的Linux基础,以及对需要学习的新知识进行了复习,也对markdown的语法进行了初步的了解.开始学习markdown的一些基本语法和Linux的一些常用命 ...
- vcpkg-微软开发的VC++打包工具
vcpkg-VC++打包工具 1. 介绍 VCPKG,是VC++ Packaging Tool. 是微软 C++ 团队开发的在 Windows 上运行的 C/C++ 项目包管理工具,可以帮助您在 Wi ...