零基础也能看懂的python内置csv模块教程
作者:梦想橡皮擦 发布时间:2023-01-06 14:03:16
csv(Comma-Separated Values)文件是什么?
它是一种文件格式,一般也被叫做逗号分隔值文件,可以使用 Excel 软件或者文本文档打开 。
其中数据字段用半角逗号间隔(也可以使用其它字符),使用 Excel 打开时,逗号会被转换为分隔符。
csv 文件是以纯文本形式存储了表格数据,并且在兼容各个操作系统。
例如下面的文本,在 excel 中就以表格的形式存在。
sid,name,age
10010,橡皮擦,18
10086,发量迷人的乔喻,19
10000,各位博主,20
下面就对 python 内置模块 csv 的用法进行简单的说明。
python 中的 csv 文件清晰解法
读取文件
使用 csv.reader()
读取 csv 文件内容。
import csv # 模块导入
with open('aa.csv', 'r', newline='', encoding='utf-8') as f:
# <_csv.reader object at 0x00000000020918D0>
reader = csv.reader(f)
for r in reader:
print(r)
其中 csv.reader()
方法的原型如下所示:
csv.reader(csvfile, dialect='excel', **fmtparams)
其中的参数 csvfile
可以是任何对象,但要求该对象是一个迭代器,所以文件对象和列表对象都可以传入,如果是文件对象,还要求打开它时携带参数 newline=''
。后面的参数保持默认即可。
第二种方式是使用 DictReader
类,该类实现的效果与 reader()
方法一致,也是接收可迭代对象,返回生成器,差异是将返回的结果放到了一个字典的值内,字典的键就是单元格的标题。并且这样输出的函数是,不需要单独处理 csv 的列头行了。
import csv # 模块导入
with open('aa.csv', 'r', newline='', encoding='utf-8') as f:
reader = csv.DictReader(f)
for r in reader:
print(r)
输出内容:
OrderedDict([('sid', '10010'), ('name', '橡皮擦'), ('age', '18')])
OrderedDict([('sid', '10086'), ('name', '发量迷人的乔喻'), ('age', '19')])
OrderedDict([('sid', '10000'), ('name', '各位博主'), ('age', '20')])
写入文件
csv 文件写入用到的模块方法是 csv.writer()
,该方法的原型如下:
csv.writer(csvfile, dialect='excel', **fmtparams)
最基本的写入:
import csv
with open('abc.csv', 'w', newline='') as csvfile:
w = csv.writer(csvfile)
# 写入列头
w.writerow(["sid", "name", "age"])
w.writerow(["10010", "橡皮擦", "18"])
w.writerow(["10086", "发量迷人的乔喻", "18"])
这时如果你在打开文件时,缺少了 newline=''
,那写入 csv 文件内容之后,会出现多余的换行。
除此之外,我们写入 csv 文件的时候,可以启用 dialect
(方言)参数。例如使用 |
作为列的分隔符。
此时的文件写入代码写成下述内容:
class my_dialect(csv.Dialect):
lineterminator = '\r\n'
delimiter = ';'
quotechar = '"'
quoting = csv.QUOTE_MINIMAL
with open('abc.csv', 'w', newline='') as csvfile:
w = csv.writer(csvfile, dialect=my_dialect)
# 写入列头
w.writerow(["sid", "name", "age"])
w.writerow(["10010", "橡皮擦", "18"])
w.writerow(["10086", "发量迷人的乔喻", "18"])
上述代码定义了一个新的类 my_dialect
,并使其继承 csv.Dialect
类,重写了其中的部分字段。
delimiter
:分隔字符,默认为 ,
;
lineterminator
:writer 方法写入数据时,每行的结尾字符,默认为 \r\n
;
quotechar
:单字符,用于包裹具有特殊字符的字段,例如 定界符,引号字符,换行符,默认是 "
;
quoting
:控制 writer 何时生成引号,以及 reader 何时识别引号,默认是 QUOTE_MINIMAL
,其余几个值分别是
QUOTE_ALL(全部加引号),
QUOTE_MINIMAL(特定情况加),
QUOTE_NONNUMERIC(所有非数字加),
QUOTE_NONE(都不加);
Writer
对象的方法说明:
csvwriter.writerow(row)
:写入单行;
csvwriter.writerows(rows)
:写入多行
import csv # 模块导入
csv_headers = ['name', 'age']
rows = [('橡皮擦', 18),
('发量迷人的乔喻', 19),
('各位博主', 20)]
with open('./aa.csv', 'w', encoding='utf-8',newline='') as f:
csv_file = csv.writer(f)
csv_file.writerow(csv_headers) # 写入头
csv_file.writerows(rows)
与 DictReader
类使用方法差不多,还存在一个 DictWriter
类,该类将以字段格式写入 csv
文件字段。
import csv
with open('abc.csv', 'w', newline='') as csvfile:
w = csv.DictWriter(csvfile, fieldnames=['sid', 'name', 'age'])
w.writeheader() # 写入列头
w.writerow({'sid': '10010', 'name': '橡皮擦', 'age': 18})
w.writerow({'sid': '10010', 'name': '橡皮擦', 'age': 18})
w.writerow({'sid': '10010', 'name': '橡皮擦', 'age': 18})
上述代码尤其注意 fieldnames
参数是必填参数,表示的是列头,并且在写入正式数据前,需使用 w.writeheader()
写入列头。
csv 文件其它说明
关于 csv 方言,可以使用 csv.register_dialect
方法将 name
与 dialect
关联起来,核心含义相当于给 dialect
起了一个别名。删除也比较简单,使用 csv.unregister_dialect(name)
即可。csv.list_dialects()
返回已经注册的方言名称,你可以在电脑上做一下测试,查看 Python 环境中提供的几种方言。
import csv
csv.register_dialect('ca', delimiter='|', quoting=csv.QUOTE_MINIMAL)
with open('abc.csv', 'w', newline='') as csvfile:
w = csv.DictWriter(csvfile, fieldnames=['sid', 'name', 'age'], dialect='ca')
w.writeheader() # 写入列头
w.writerow({'sid': '10010', 'name': '橡皮擦', 'age': 18})
w.writerow({'sid': '10010', 'name': '橡皮擦', 'age': 18})
w.writerow({'sid': '10010', 'name': '橡皮擦', 'age': 18})
csv 模块还提供了 csv.Sniffer
类,用于推断 csv 文件的格式,其存在两个方法:
sniff(sample, delimiters=None):分析并返回一个 dialect 子类,可以分析出格式参数;
has_header(sample):分析 csv 文件是否存在标题。
来源:https://blog.csdn.net/hihell/article/details/121250076
猜你喜欢
- 一、Python短信发送界面最后的效果二、准备:注册腾讯云账号并配置短信功能(1)注册腾讯云账号登录腾讯云网址(2)获取AppID、AppK
- “表情包”是现在非常流行的交流方式,通过一张图片就能把文字不能表达或不便于表达的情感给表示出来,表情包一经诞生,就统治了中国人的社交圈,尤其
- 聚集索引,数据实际上是按顺序存储的,数据页就在索引页上。就好像参考手册将所有主题按顺序编排一样。一旦找到了所要搜索的数据,就完成了这次搜索,
- 对于需要大量翻译的数据,人工翻译太慢,此时需要使用软件进行批量翻译。1.使用360的翻译def fanyi_word_cn(string):
- 如下所示://用普通文本文件方式打开和操作with open("'file.csv'") as cf:
- SQL1: --1、查看表空间的名称及大小 SELECT t.tablespace_name, round(SUM(bytes / (102
- 本文实例讲述了Python脚本实现虾米网签到功能的方法。分享给大家供大家参考,具体如下:概述这个脚本完成了自动登录虾米网、签到的功能。大致要
- 我认为多选列表具有完美的功能——只需按下Ctrl键,同时点击鼠标从列表中选择多个项目。以下是一个典型的多选列表框:选出你最喜爱的快餐:&nb
- <?php function getDerivativeByFormulaAndXDATA($formula, $x_data){ $
- 前言所谓“基础不狠,人站不稳”,对于任何一种编程语言来说基础往往都是重中之重,以Python为例,其
- 对于Python内置函数sorted(),先拿来跟list(列表)中的成员函数list.sort()进行下对比。在本质上,list的排序和内
- 关于SQL查询效率,100w数据,查询只要1秒,与您分享:机器情况:p4: 2.4内存: 1 Gos: windows 2003数据库:SQ
- python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象。。。。。。我们通
- Python操作注册表步骤之1.打开注册表对注册表进行操作前,必须打开注册表。在Python中,可以使用以下两个函数:RegOpenKey和
- 本文讨论 MySQL 的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM 和 Innodb,文中设计的 MySQL
- 本文实例讲述了asp.net实现图片以二进制流输出的两种方法。分享给大家供大家参考,具体如下:方法一:System.IO.MemoryStr
- AddHeaderAddHeader 方法用指定的值添加 HTML 标题。该方法常常向响应添加新的 HTTP 标题。它并不替代现有的同名标题
- 本文实例讲述了php 多继承的几种常见实现方法。分享给大家供大家参考,具体如下:class Parent1 { function
- alleen 问:下面是我制作的一菜单效果,现在的问题是当我只点击一级菜单A一次的时候,一级菜单A的背景色由绿色变成了黄色,再点击一级菜单B
- 1、什么是偏函数partialpython中提供一种对于函数固定属性的函数 2、偏函数的作用把一个函数的某些参数给固定住(也就是设