Python--CSV模块

 2023-09-11 阅读 22 评论 0

摘要:CSV csv文件格式是一种通用的电子表格和数据库导入导出格式 简介 Python csv模块封装了常用的功能,使用的简单例子如下: 写入 # 写入csv文件 import csvcsvfile = open('csv_test.csv', 'w',newline='') # 如果不指定newline=

CSV

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

简介

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

写入

# 写入csv文件
import csvcsvfile = 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方式为不引用。这意味着读的时候都认为内容是不被默认引用符(")包围的。

Python csv。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 csvdef 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_strreturn valuef = 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 = 0print(tb)  # 打印表格*---------*-----*------*-----*-----*
|Dir      |Use% |Avail |Used |Size |
*---------*-----*------*-----*-----*
|/        | 11% |82G   |9.3G |96G  |
|/dev/shm |  1% |931M  |72K  |931M |
|/boot    |  9% |421M  |39M  |485M |
*---------*-----*------*-----*-----*

转载于:https://www.cnblogs.com/geogre123/p/11223961.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/43653.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息