python excel处理教程(教你如何用python轻轻松松操作Excel)
python excel处理教程(教你如何用python轻轻松松操作Excel)返回一个 writer 对象,该对象负责将用户的数据在给定的文件类对象上转换为带分隔符的字符串。writer(csvfile dialect=’excel’ **fmtparams)因为 CSV 文件与 Excel 文件默认都是用 Excel 工具打开,那他们有什么区别呢?我们通过下表简单了解一下。Python 通过 csv 模块来实现 CSV 格式文件中数据的读写,该模块提供了兼容 Excel 方式输出、读取数据文件的功能,这样我们无需知道 Excel 所采用 CSV 格式的细节,同样的它还可以定义其他应用程序可用的或特定需求的 CSV 格式。csv 模块中使用 reader 类和writer 类读写序列化的数据,使用DictReader 类和DictWriter 类以字典的形式读写数据,下面来详细看一下相应功能。首先来看一下 csv 模块常量信息,如下所示:
读取 Word 文件
上面写了很多用 Python 创建空白 Word 文件格式化字体并保存到文件中,接下来我们再简单介绍下如何读取已有的 Word 文件,请看如下代码:
# 引入库
from docx import Document
# 打开文档1
doc1 = Document('word1.docx')
# 读取每段内容
pl = [ paragraph.text for paragraph in doc1.paragraphs]
print('###### 输出word1文章的内容 ######')
# 输出读取到的内容
for i in pl:
print(i)
# 打开文档2
doc2 = Document('word2.docx')
print('\n###### 输出word2文章内容 ######')
pl2 = [ paragraph.text for paragraph in doc2.paragraphs]
# 输出读取到的内容
for j in pl2:
print(j)
# 读取表格材料,并输出结果
tables = [table for table in doc2.tables]
for table in tables:
for row in table.rows:
for cell in row.cells:
print (cell.text end=' ')
print
print('\n')
以上代码是将之前我们输出的两个文档内容都读取出来,当然这里只是打印到控制台,并没有做其他处理。现在我们执行看下结果:
Python 操作 CSV简介
CSV
CSV
全称Comma-Separated Values
,中文叫逗号分隔值或字符分隔值,它以纯文本形式存储表格数据(数字和文本),其本质就是一个字符序列,可以由任意数目的记录组成,记录之间以某种换行符分隔,每条记录由字段组成,通常所有记录具有完全相同的字段序列,字段间常用逗号或制表符进行分隔。CSV 文件格式简单、通用,在现实中有着广泛的应用,其中使用最多的是在程序之间转移表格数据。
CSV 与 Excel
因为 CSV 文件与 Excel 文件默认都是用 Excel 工具打开,那他们有什么区别呢?我们通过下表简单了解一下。
CSV | Excel |
---|---|
文件后缀为 .csv | 文件后缀为 .xls 或 .xlsx |
纯文本文件 | 二进制文件 |
存储数据不包含格式、公式等 | 不仅可以存储数据,还可以对数据进行操作 |
可以通过 Excel 工具打开,也可以通过文本编辑器打开 | 只能通过 Excel 工具打开 |
只能编写一次列标题 | 每一行中的每一列都有一个开始标记和结束标记 |
导入数据时消耗内存较少 | 数据时消耗内存较多 |
基本使用
Python 通过 csv 模块来实现 CSV 格式文件中数据的读写,该模块提供了兼容 Excel 方式输出、读取数据文件的功能,这样我们无需知道 Excel 所采用 CSV 格式的细节,同样的它还可以定义其他应用程序可用的或特定需求的 CSV 格式。
csv 模块中使用 reader 类
和writer 类
读写序列化的数据,使用DictReader 类
和DictWriter 类
以字典的形式读写数据,下面来详细看一下相应功能。首先来看一下 csv 模块常量信息,如下所示:
属性 | 说明 |
---|---|
QUOTE_ALL | 指示 writer 对象给所有字段加上引号 |
QUOTE_MINIMAL | 指示 writer 对象仅为包含特殊字符(如:定界符、引号字符、行结束符等)的字段加上引号 |
QUOTE_NONNUMERIC | 指示 writer 对象为所有非数字字段加上引号 |
QUOTE_NONE | 指示 writer 对象不使用引号引出字段 |
writer(csvfile dialect=’excel’ **fmtparams)
返回一个 writer 对象
,该对象负责将用户的数据在给定的文件类对象上转换为带分隔符的字符串。
-
csvfile
可以是具有 write 方法的任何对象,如果 csvfile 是文件对象,则使用 newline=’’ 打开; -
可选参数
dialec
t 是用于不同的 CSV 变种的特定参数组; -
可选关键字参数
fmtparams
可以覆写当前变种格式中的单个格式设置。
看下示例:
import csv
with open('test.csv' 'w' newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['id' 'name' 'age'])
# 写入多行
data = [('1001' '张三' '21') ('1002' '李四' '31')]
writer.writerows(data)
reader(csvfile dialect=’excel’ **fmtparams)
返回一个 reader 对象
,该对象将逐行遍历 csvfile,csvfile 可以是文件对象和列表对象,如果是文件对象要使用 newline=’’ 打开。看下示例:
import csv
with open('test.csv' newline='') as csvfile:
reader = csv.reader(csvfile delimiter=' ')
for row in reader:
print(' '.join(row))
Sniffer 类
用于推断 CSV 文件的格式,该类提供了如下两个方法:
sniff(sample delimiters=None)
分析给定的 sample,如果给出可选的 delimiters 参数,则该参数会被解释为字符串,该字符串包含了可能的有效定界符。
has_header(sample)
分析示例文本(假定为 CSV 格式),如果第一行很可能是一系列列标题,则返回 True。
该类及方法使用较少,了解即可,下面通过一个示例简单了解一下。
import csv
with open('test.csv' newline='') as csvfile:
dialect = csv.Sniffer.sniff(csvfile.read(1024))
csvfile.seek(0)
reader = csv.reader(csvfile dialect)
for row in reader:
print(row)
Reader 对象
Reader 对象指 DictReader 实例和 reader 函数返回的对象,下面看一下其公开属性和方法。
next
返回 reader 的可迭代对象的下一行,返回值可能是列表或字典。
dialect
dialect 描述,只读,供解析器使用。
line_num
源迭代器已经读取了的行数。
fieldnames
字段名称,该属性为 DictReader 对象属性。
Writer 对象
Writer 对象指 DictWriter 实例和 writer 函数返回的对象,下面看一下其公开属性和方法。
writerow(row)
将参数 row 写入 writer 的文件对象。
writerows(rows)
将 rows_(即能迭代出多个上述_ row 对象的迭代器)中的所有元素写入 writer 的文件对象。
writeheader
在 writer 的文件对象中,写入一行字段名称,该方法为 DictWriter 对象方法。
dialect
dialect 描述,只读,供 writer 使用。
写读追加状态
'r':读
'w':写
'a':追加
'r ' == r w(可读可写,文件若不存在就报错(IOError))
'w ' == w r(可读可写,文件若不存在就创建)
'a ' ==a r(可追加可写,文件若不存在就创建)
对应的,如果是二进制文件,就都加一个b就好啦:
'rb' 'wb' 'ab' 'rb ' 'wb ' 'ab
来源:https://juejin.im/post/6868073137263607821
回复下方「关键词」,获取优质资源
回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版
回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版
回复关键词「m」,立即获取Python精选优质文章合集
回复关键词「」,将数字替换成 0 及以上数字,有惊喜好礼哦~
题图:pexels,CC0 授权。