基于Python的Excel读写操作--内容超详细,值得排排坐

    今日份超详细的解读,Excel文件基础操作,让你以学就会。

    写这个的原因是,一位群友问了很久,然后网上的教程写的又不是很详细,看的有些犯迷糊,所以我今日份写一份超详细的基本操作,让你打下良好的基础。

    今天我们来讲讲Excel的不同 文件格式的一些操作:

目录

1、前言介绍

2、txt文本

2.1、read()读取所有的文本内容

2.2、readline()读取一行

2.3、readlines() 读取文件中所有文本的内容

3、xlrd及xlwt

3.1、写入操作

3.2、读取操作

4、openpylx

5、yaml文件

6、结束语


1、前言介绍

    这四种文件的基本操作还是很重要的,废话不多说我们直接进入正题!!!

我们先了解一个fail函数的使用方法:

对于file文件的使用流程:打开文件--读或者写--关闭文件

1. 打开文件:f=open(文件名,模式)

2. 写:f.write(写入的文本内容)

3. 读:f.read([字符数量]) f.readline() f.readlines()

4. 关闭文件:f.close()

这里的模式常用的有:

# "r" - 读取 - 默认值。打开文件进行读取,如果文件不存在则报错。
# "a" - 追加 - 打开供追加的文件,如果不存在则创建该文件。
# "w" - 写入 - 打开文件进行写入,如果文件不存在则创建该文件。
# "x" - 创建 - 创建指定的文件,如果文件存在则返回错误。

还有就是一些不是常用的:

r+打开一个文件用于读写(指针在文件开头)w+打开一个文件用于读写
a+打开一个文件用于读写rb二进制格式打开用于只读
wb二进制格式写入ab二进制格式打开用于追加

上面表格参考为辅!

先来看看普通的文本操作

# 记得加上,encoding='utf-8'
file = open(r"text_make")   
#读取两个字符,python中一个汉字一个字符而不是一个汉字两个字符
num = file.read(2)
print(num)

      这里的r是转义字符,有时候写入绝对路径的时候会有字符路径错误的现象!如果项目中没有文件,使用方法的时候python会帮你自动创建一个哦!小北这里的文件是没加后缀名的,有些细心的小伙伴就会发现,为什么不加,不加不会报错吗,这个跟版本有关系吧,项目中如果文件加了后缀名,小伙伴们就记得加上哦,小北这里是没有的,所以加了反而报错!!!后面小北介绍的项目是加后缀名的哦。

介绍介绍read以及其他的几个读的操作:

2、txt文本

我们一一看来,

2.1、read()读取所有的文本内容

file = open(r"text_make")   # 记得加上,encoding='utf-8'
num = file.read()
print(num)

    当python提示你转义问题的时候,记得加上我备注的格式encoding='utf-8',read()里面不写参数的时候就是读取全文,写入参数,按字符串形式读取,看我们上面的例子,read(2),读取两个字符,这里是读取全文,小北的这个txt文件是自己随便写的内容哦!

2.2、readline()读取一行

file = open(r"text_make")
#读取一行,想要读取多行就得写多少次
read_num = file.readline()
#...
# 使用type可以查看打印的类型
print(read_num,type(read_num))
#readline,用法跟read相类似,可以添加字符长度

用法其实先类似,没有太大的差别,小伙伴记得机器创建一个文本跟着操作一下

想要读取全文,不想一直read_num = file.readline()下去,我们可以使用for循环!

file = open(r"text_make")
for read_num in range(10):
    print(file.readline())
# 关闭文件释放资源
file.close()

这里的range(10)是行数哦,当文本内容不足十行,循环就停止了

2.3、readlines() 读取文件中所有文本的内容

file = open(r"text_make")   # 记得加上,encoding='utf-8'
read_num1 = file.readlines()
#想要不以列表的形式输出,就使用for循环遍历吧
# for read_num2 in read_num1:
print(read_num1)
# 关闭文件释放资源
file.close()

    读取文件中所有的文本内容,如果我们前面使用了read或者readline,该方法就会接着读取后面的内容,前面的内容就不会再读取了哦,小伙伴注意了。上面也给出了另种方法打印哦小伙伴自己尝试一下。

    小北这边给出for循环打印的结果图哦:

注:记得使用变量去接收打开文本方法的,都需要加上变量.close(),打开文件后关闭文件,释放内存资源

我们看看txt文本中的写、追加以及读写操作,小伙伴一定要一个个自己动手尝试!!!

# w,a的属性
# 对于不存在的文件自动会创建一个
mini = open('china_name','w',encoding='utf-8')
mini.write('你好,python')#写入后会自动保存
# 如果你再次以w的放方式写入,之前的内容就会被刷新掉,显示当前的内容,是一种覆盖写,覆盖掉原来的内容
mini.write('你好,Java')

# 追加写
mini = open('china_name1','a',encoding='utf-8')
mini.write('你好,python')#写入后会自动保存
mini.write('我来了')
mini.close()

# 读写操作,先读后写,写入了之后是在文本的最后面,不读直接写是会写在文本的最前面
mini = open('china_name1','r+',encoding='UTF-8')
a = mini.read()
print(a)
#换行,使用换行符可以输入多行文字
mini.write('\n每个人身上都有毛毛')
mini.close()

    这里,小北一下子介绍了三种方式,小伙伴可要看明白了,其中的操作,小伙伴一定要自己尝试,不然是体会不了的哦。

    小北的这个效果图是执行了两遍的效果图哦,在这里的小北需要说明的一点就是,其实追加写跟写入区别只有一点,自己尝试过的小伙伴肯定就一下子明白了,追加写不管有么有内容,都可以一直在文本的后面继续写入内容,write写入呢,会把原来写入的内容覆盖掉。

小北介绍一种不需要写close的打开文本方法哦

 with open('路径','模式) as 变量名:
    代码块
with open('china_name1','r+',encoding='UTF-8') as reading:
    # 读取行数
    read_open = reading.readline()
    # 只打印一行
    print(read_open)
    # rd_ing = reading.write('本次课程') write不支持写了就输出
    # print(rd_ing)
    for red in reading:
        print(red)

看这个格式,这里呢,我注释了一个打印方法,因为不支持这样的写法,虽然可以输出,但是是错误内容哦,不是想要的内容,所以这里我们使用了for循环的方法进行输出。

接下来的才是正题菜,易理解!!!

    小北现在这说一下excel的几种格式,然后大多数以代码格式分享,加上注释,帮助小伙伴快速理解其中

常用的库,xlrd(read),xlwt(write),openpyxl(支持读写修改,但是不支持xls格式的excel文档,支持新版本的xlsx)

    至于导入包这个操作,我想应该不需要我多说了吧,实在不会的直接在pycharm里面import 包名,指定红色部分直接下载就好。

import xlwt
import xlrd
import openpyxl
import yaml

3、xlrd及xlwt

1. xlrd - 读取 Excel 文件,支持.xls和.xlsx格式

2. xlwt - 写入 Excel 文件,只支持.xls格式 

3. openpyxl - 既可以读文件、也可以写文件、也可以修改文件;但是,openpyxl 库不支 持 xls 格式的Excel文档,如果要读写xls格式的文档,可以使用 Excel 进行相应的格式转 化,或者使用xlwt库来进行写的操作。

3.1、写入操作

    我们先来看看xlrd格式的以及xlwt格式的,这两个一个是读,一个是写,我们在操作的时候可以一起使用的哦,首先我们看看写入的操作:

# 实例化类,建立好表单,创建文件名为exl1
exl1 = xlwt.Workbook()
# 在表中创建一个表单,并修改表单的名字,给定一个变量为sh1
sh1 = exl1.add_sheet('userinfo')
# 写入数据,默认坐标位置是(0,0),A列表第一行第一列坐标为(0,0),B列表为第二行,我想在第一列输出那么就是(0,1)
sh1.write(0, 0, 'username')
sh1.write(0, 1, 'password')
# 保存这个文件到指定位置,默认位置也是可以的,保存在项目中
exl1.save('D:\python练习\log.xls')

    我在这里首先自己创建了一个excel文件哦,在这里呢,我们需要解释一下了xls是老版本的excel,xlsx是新版本的,所以注意文件后缀明哦,读取操作这个实例化对象的操作都是支持的。上述是读取文件信息,读取后发现什么也没有,接下来我们就是要写入点东西了。

    看图小伙伴就懂了吧,以username为坐标(0,0),往下就是(1,0)以此类推,password坐标为(0,1)往下就是(1,1)依次类推写入

不想每次手动写入,我们就用循环来写吧。

# 实例化类,建立好表单,创建文件名为exl1
exl1 = xlwt.Workbook()
# # 在表中创建一个表单,并修改表单的名字,给定一个变量为sh1
sh1 = exl1.add_sheet('userinfo')
# # 写入数据,默认坐标位置是(0,0),A列表第一行第一列坐标为(0,0),B列表为第二行,我想在第一列输出那么就是(0,1)
sh1.write(0, 0, 'username')
sh1.write(0, 1, 'password')
#定义一个列表
write_two = ['zhangsan','123456']
#使用for循环介入,这里len()是计算长度,因为range里面不能接入列表,所以需要用len返回长度给到range,并使用索引值来取值
for i in range(len(write_two)):
    #第一行,第i个值,这里有0跟1,然后再写入第i个位置的字符串
    sh1.write(1,i,write_two[i])
# 保存excel表格,到指定的位置
exl1.save('D:\python练习\log.xls')

可能有些小伙伴对这个sh1.write(1,i,write_two[i])抱有很大的一问,=_=

1为我们默认的第一行,i为我们所需要的位置信息,从第0列开始填充,write_two[i],这个就是列表取值了,索引值哦,所以打xls里面就是(1,0)位置写列表中的zhangsan,以此来的哦。

3.2、读取操作

#读取操作,读写可以一起的
read_fail = xlrd.open_workbook('D:\python练习\log.xls')
#读取表单操作
us1 = read_fail.sheet_by_name('userinfo') #表单名字读取
us1 = read_fail.sheet_by_index(0) #表单索引读取,第一个表单为0以此类推
# 读取属性信息,总行数总列数
print(us1.nrows) #行
print(us1.ncols) #列
print(us1.name) #表单名字

    这里我们介绍了读取属性信息以及两种表单名字读取,其实第一种更偏向于核实表单是否是这个名字哦!

另外再介绍一下读取表单的一些方法:

读取一行    row1 = sh1.row_values(0)
读取一列    col1 = sh1.col_values(0)
读取一个单元格 cell1 = sh1.cell_value(0,0)或者cell1 = sh1.cell(0,1).value
# 单元格信息读取,坐标形式读取
a1 = sh1.cell_value(0,0)
#a1 = sh1.cell(0,1).value
print(a1)
#读取一行,以列表的形式打印,索引的形式读取
row_1 = sh1.row_values(1)
print(row_1)
#读取一列,索引值的方式进行读取
cell1 = sh1.col_values(1)
print(cell1)

这里是跟上面的读取例子其实是一体的,小北将他们拆分了而已。

小北这里贴了两张图,以便于小伙伴理解哦!!!

4、openpylx

    它的操作方式与上面两种还是有所不同的,使用的方法及操作都会有所不同,首先准备一个文件哦,写入一些数据

1、打开一个文件(.xlsx文件) book = openpyxl.load_workbook(文件名)

2、使用sheet工作表 sh1 = book.get_sheet_by_name('Sheet1') 或者sh1=book.active

3、单元格写入 sh1['C2'] = '张三' 或者 sh1.cell(1,3).value= 'lisi' 行和列的索引值是从1开始的

4、整行写入['张三','李四','wangwu','王五']

ex1 = openpyxl.load_workbook(r'D:\python练习\api.xlsx')
num1 = ex1.get_sheet_by_name('Sheet1')
# 这个是默认打开第一个表单
# ex1.active
print(num1.max_row)  # 总行数
print(num1.max_column) # 总列数
# # 写入pass,fail
# num1['F2'] = 'PASS'
# 用坐标的位置写入
num1.cell(2,6).value = 'PASS'
# num1['F3'] = 'FAIL'
num1.cell(3,6).value = 'PASS'

    这里我们 先使用指定的方法读取这个文件,然后写入两个PASS字符串

# 写入整行的数据,openpylx会自动更具excel表格进行数据写入
new1 = ['张三','李四','wangwu','王五']
num1.append(new1)
#保存
ex1.save(r'D:\python练习\api.xlsx')

    然后我们定义一个列表,使用列表的方法将列表里面的值添加进小北的这个文件,这里openpylx有一个很不错的功能就是会自动更具excel表格的形式,使用列表里的值进行填充写入哦。

最后呈现这样的啦,这里小北是随意输入的数据哦。

接下来我们看看读取的操作

1:打开一个文件(.xlsx文件) book = openpyxl.load_workbook(文件名)

2:使用sheet工作表 sh1 = book.get_sheet_by_name('Sheet1') 或者sh1=book.active

3:读取内容 按单元格读取 cell1 = sh1['A1'].value 或者 cell2= sh1.cell(1,2).value 行和列的索引值是从1开始的 按行读取 for row in sheet.iter_rows(min_row=1,max_row=3): for cell in row: print(cell.value,end= '\t') print()

按列读取 for row in sheet.iter_rows(min_col=1,max_col=3): for cell in row: print(cell.value,end= '\t') print()

#读的操作
look = openpyxl.load_workbook(r'D:\python练习\api.xlsx')
sh1 = look.active
# 按单元格读取
A1 = sh1['A1'].value
print(A1)
# 如果没有value属性,读取的就只是单元格
# 用坐标的方式读取第一行第二列
A1 = sh1.cell(1,2).value
print(A1)

这里读取的时候坐标原始值就是(1,1)开始了哦。不是(0,0)了。这个操作也是上面的同一个文件哦

看下面这个循环操作:

# 使用for循环配合max_row直接拿取前几行内容,可以结合max_col= ,min_col= 使用,限制行跟列打印
for i in sh1.iter_rows(max_row=1):  
    for r in i:                     
        print(r.value)

    这里我们看到新的东西max_row=1,这个是最大行数为1的意思,max_col= 最大列数,min_col=最小列数,min_row = 最行数,可以通过这样的配合,来限制打印内容哦。

#就是输出第一行的每一个单元格内容,可以使用min_row= ,来限制打印函数,最小从第一行开始,最大到第三行结束
for i in sh1.iter_rows(min_row = 1,max_row = 3):
    for r in i:
        print(r.value,end= '\t')
    print()

最后得到的效果就是:

对比一下写入操作的时候的那一张excel图哦!!

5、yaml文件

    它有很多规矩:

1. 大小写敏感

2. 使用缩进表示层级关系

3. 缩进时不允许使用Tab键,只允许使用空格。

4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

5. #表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样

    关于它的介绍

1. 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

2. 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

3. 纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间 注意:yaml文件的键和值之间一定要多加一个空格,不然语法错误!

    这里我就不一一介绍了,直接上图吧:这里注意我的格式写法,空格在哪,以及yaml文件中列表的表现 形式:

进入正题:

打开yaml文件:with open(文件名,模式) as f(变量名):

读取yaml文件内容 msg=yaml.load(f)

load(stream)方法,将yaml文件转为python数据类型,load参数是一个文件流

#默认属性就是读,这里未接后缀名,根据版本不同,有的需要添加,还有就是转义字符
with open('D:\python练习\login.yaml',mode='r',encoding='UTF-8') as d:
    names = yaml.load(d) #读取文件,load是一个文件流,将yaml转为python的数据类型
    print(names)
# 输出对应的值
user1 = names['case1']['user1']
print(user1)
pw1 = names['case1']['pwasswd1']
print(pw1)

这里有一个报红,不影响我们操作

对于这个yaml文件,小伙伴需要自己准备文件哦

写入数据用yaml.dump(数据,文件流,allow_unicode=True)

dump(data, stream,allow_unicode=True)方法将python数据对象转为yaml文件

allow_unicode=True :避免写入的数据出现乱码

file_name = open('D:\python练习\login.yaml',mode='a',encoding='UTF-8')
case= {
    'case8': {
        'user8': 'tom',
        'pwasswd8': '12345',
        'errorText8': '用户名密码错误,请重新输入'}
    }
# 写入数据
yaml.dump(case, file_name, allow_unicode=True)
file_name.close()

哈哈哈哈最后这张图没办法,电脑问题,截图黑屏,所以只能手机拍照了。

6、结束语

excel的文件基础操作就是这些了,小伙伴们学会了吗

最后这个yaml文件小伙伴实在不知道怎么弄,就私信我吧!

  • 12
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清安无别事

慢慢的积累一杯奶茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值