csv是python内置模块吗_Python--CSV模块 - 一只小小的寄居蟹 - 博客园

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 |

*---------*-----*------*-----*-----*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值