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. vue中moudles的作用及使用方法

    1.作用:vuex允许把store分割为模块,每一个模块都有自己的state,actions,getters,mutations甚至是嵌套一些子模块,从上到下进行同样方式的分割 在文件src中创建一个 ...

  2. UVaLive 3490 Generator (KMP + DP + Gauss)

    题意:随机字母组成一个串,有一个目标串,当这个由随机字母组成的串出现目标串就停止,求这个随机字母组成串的期望长度. 析:由于只要包含目标串就可以停止,所以可以先把这个串进行处理,也就是KMP,然后dp ...

  3. 分布式的CAP理论

    CAP是强一致性.可用性(实时可用).分区容忍性: Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性) 一般来说 P 是前提. ...

  4. MIT Molecular Biology 笔记5 转录机制

    视频  https://www.bilibili.com/video/av7973580?from=search&seid=16993146754254492690 教材 Molecular ...

  5. 2017-12-24 自定义view相关学习

    学习材料: http://blog.csdn.net/u010661782/article/details/52805870 http://blog.csdn.net/chengyingzhilian ...

  6. 在aliyun遇到一些问题

    1. 删除现有网站报错:“applicationhost.config 错误 无法写入配置文件” 解决办法:用管理员身份打开IIS. 2. IIS上部署MVC网站,打开后500错误:处理程序“Exte ...

  7. spring之IOC和DI实现

    Spring核心思想 : IOC控制反转 DI依赖注入 AOP切面编程 IOC思想: 场景描述: 在没有加入spring框架之前我们调取业务层时需要创建对象,例如:  接口名   变量名=new  接 ...

  8. USTC《现代软件工程》春季学期——第一次个人作业:词频统计

    截止日期 2018年3月29日23:59 要求 1. 对源文件(*.txt,*.cpp,*.h,*.cs,*.html,*.js,*.java,*.py,*.php等,文件夹内的所有文件)统计字符数. ...

  9. int LL数据范围

    unsigned int 0-4294967295 0~4e9 int -2147483648-2147483647 -2e9~2e9 unsigned long 0-4294967295 long ...

  10. noah

    1.url:controller/method 2.在index.php中设置display_errors:1 能看到错误提示