循序渐进Python程序设计 课件 第7章文件处理_第1页
循序渐进Python程序设计 课件 第7章文件处理_第2页
循序渐进Python程序设计 课件 第7章文件处理_第3页
循序渐进Python程序设计 课件 第7章文件处理_第4页
循序渐进Python程序设计 课件 第7章文件处理_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

01020304第7章文件处理7.1文本文件的读写7.2二进制文件的读写7.3CSV文件的读写7.4使用Excel工作簿057.5综合应用案例第7章文件处理7.1.1什么是文本文件7.1文本文件的读写文本文件是以字符为基本单位组织数据的文件类型,通过编码(如UTF-8、GBK)将字符转换为二进制存储。2.特点​内容可读性:​​可直接阅读(字母、数字、标点)。​编码方式:​​常见编码包括ANSI、GBK、UTF-8、GB18030。​结构简单:​​由字符行组成,行间以换行符分隔。1.什么是文本文件3.应用场景存储文档资料(文章、报告)配置文件(软件参数)数据记录(日志文件、.csv文件)编程代码(.py文件默认UTF-8编码)7.1.2文本文件的读写Python文件读写基本步骤:​​“打开→操作→关闭”7.1.2文本文件的读写第7章文件处理7.1文本文件的读写7.1.2文本文件的读写7.1.2文本文件的读写第7章文件处理7.1文本文件的读写1.打开文本文件练一练:​​

在文件存在和不存在时,分别用'r+'、'w+'、'x+'、'a+'模式打开文件,观察是否触发异常并分析原因。语法:​​open(file,mode,buffering,encoding,errors)file:文件名(不指定路径则在当前目录打开)。mode:打开模式(见下表)。encoding:设置编码方式(如"UTF-8")。errors:错误处理方式('strict'、'ignore'、'replace')。7.1.2文本文件的读写第7章文件处理7.1文本文件的读写2.​操作文本文件(1)读取数据以'r'、'r+'、'w+'、'a+'或'x+'模式打开文件后,可以利用文件对象的内置方法(见下表)读取文件数据。f=open("c:/test.txt",encoding='utf-8')s=f.read(5);print(s)s=f.readline(6);print(s)s=f.readlines(30);print(s)s=f.readlines();print(s)f.close()【练一练7.2】三种读内置函数的使用示例7.1.2文本文件的读写7.1.2文本文件的读写第7章文件处理7.1文本文件的读写2.​操作文本文件(2)将数据写入文本文件

以'w'、'w+'、'r+'、'x'、'x+'、'a'或'a+'模式打开文件后,可以利用文件对象的内置方法(见下表)将数据与入文本文件。f=open('c:/test.txt','w',encoding='utf-8') #以'w'模式打开文本文件f.write("勤能补拙") #写入字符串(未使用换行符)f.write("学海无涯苦作舟/n") #写入字符串(使用换行符)a=["宝剑锋从磨砺出","梅花香自苦寒来"]f.writelines(a) #写入字符串列表(未使用换行符)a=["\n有志者事竞成\n","知识就是力量"]f.writelines(a) #写入字符串列表(使用换行符)f.close()【例7.3】两种写内置函数的使用示例7.1.2文本文件的读写7.1.2文本文件的读写第7章文件处理7.1文本文件的读写2.​操作文本文件(3)同时读写文本文件

以"r+"、"w+"、"a+"和"x+"模式打开文本文件后,既可以从文件中读取数据,也可以将数据写入文件。通常需要借助读写重定位完成相关操作。withopen("d:/zf.txt","r+",encoding="ANSI")asf:f.seek(4)#读写位置移到了文件第4个字节之后f.write("化为")#“就是”替换为“化为”f.seek(0)

#文件读写位置移到文件开头s=f.read()#读取文件中的全部数据print(s)#输出结果为:知识化为力量【例7.5】(假定文件d:/zf.txt采用ANSI编码,文件内容为:知识就是力量)(4)读写重定位

对文件进行读写操作时,读写的位置会自动后移。必要时,也可以通过文件对象的内置方法seek重新定位读写位置。seek函数格式:seek(offset)with自动管理文件,执行完毕后自动关闭文件,避免手动操作和资源泄露。7.1.2文本文件的读写7.1.2文本文件的读写第7章文件处理7.1文本文件的读写3.​关闭文件文件操作完成后必须调用close()关闭文件,否则可能导致:(1)资源占用文件描述符耗尽:每次open()调用都会占用一个文件描述符(系统用于标识文件的非负整数),当达到系统上限时将无法打开新文件并抛出OSError。内存占用:每个打开的文件都会占用内存缓存数据,大量未关闭文件会累积消耗内存,导致性能下降甚至内存不足。(2)数据丢失Python写入文件时会使用缓冲区提升效率。调用write()时数据暂存缓冲区,仅当缓冲区满或文件关闭时才写入磁盘。若未正常关闭文件,程序崩溃或断电可能导致缓冲区数据丢失。(3)文件损坏文件元数据不一致:文件不关闭导致文件元数据(如大小、修改时间)无法正确更新,在系统异常时可能造成文件损坏。为确保文件并发访问安全,系统会对文件加锁。若未正常关闭文件,锁将无法释放,导致其他程序无法访问,可能引发数据冲突或文件损坏。(4)并发访问问题在多进程/线程环境中,未关闭文件可能导致访问冲突。例如,一个线程写入文件后未关闭,另一线程读取时可能获取不完整或错误数据,引发数据不一致问题。7.2.1bytes数据类型7.1.2文本文件的读写第7章文件处理7.2二进制文件的读写1.字符串与字节串的比较​字符串vs字节串:​​字符串:字符序列(可读文本)。字节串:字节序列(二进制数据,元素为0-255整数)。​2.创建bytes对象①字面量:​​s=b"Good"(仅限ASCII字符)。s=b"Good"#创建字节串print(s[0],s[-1]#利用索引输出字节串的第1个元素和最后1个元素#输出:70100#字符"G"、"d"的ASCII值分别为70、100②使用

bytes类的构造函数创建bytes对象:​​bytes():创建空字节串。bytes(n):创建长度为n的全0字节串。bytes(iterable):从可迭代对象创建。bytes(string,encoding):按编码转换字符串。s="不到长城非好汉"print(s.encode() #输出字符串的UTF-8编码print(s.encode("GBK") #输出字符串的GBK编码③使用字符串对象的

encode方法创建

bytes

对象【练一练】仿效上例方法输出全部英文字母和数字的ASCII码值。【例7.7】【例7.8】7.2.1bytes数据类型7.1.2文本文件的读写第7章文件处理7.2二进制文件的读写3.将

bytes

对象转换为字符串使用

bytes

对象的

decode方法可将字节串解码为字符串。decode方法的语法格式:参数说明:encoding指定使用的编码方式;errors指定无法解码时的处理方式,默认值为'strict'(抛出异常)。也可设置为'ignore'(忽略错误,不作处理)和'replace'(使用字符'?'替换无法解码的字符)。s="岩松立壁迎霜劲,翠竹凌霜傲雪坚"b=s.encode()#按UTF-8编码将字符串转换为字节串s=b.decode()#按UTF-8编码对字节串进行解码,得到字符串sprint(s)#因编码与解码方式相同,能正常输出s=b.decode("ANSI")#对字节串b按ANSI解码,会出现乱码print(s)#输出的是乱码【例7.9】decode(encoding='utf-8',errors='strict')7.2.2二进制文件的读写第7章文件处理7.2二进制文件的读写1.文件打开模式open函数默认使用文本模式。对于二进制文件,必须使用二进制模式打开,即在原文本模式的基础上添加字符

'b'。如

'rb'(二进制只读)、'wb+'(二进制读写写)等。

二进制文件读写的数据是

bytes

类型。在使用文件对象的内置方法write写入的数据必须为bytes

对象;使用read方法读取的数据也是

bytes

对象。如果需要将字符串对应的某一编码写入文件,或读取的字节串可以还原为字符串,程序必须自行进行编码或解码操作。2.数据类型3.编码问题7.2.2二进制文件的读写7.1.2文本文件的读写第7章文件处理7.2二进制文件的读写4.缓冲策略

文本文件默认的缓冲策略通常是行缓冲,即数据会在遇到换行符时写入文件。而二进制文件默认的缓冲策略通常是全缓冲,即当缓冲区满时才会将数据写入文件。可以通过open函数的

buffering

参数来调整缓冲策略。5.重定位利用seek函数对二进制文件读写位置进行重定位时,函数格式为:seek(offest,from)

withopen("d:/z7.png","rb+")asf:

#读写模式打开二进制文件

f.seek(-1,2)

#定位到最后1个字节前

f.write(bytes([0]))

#修改最后1个字节为0【练一练】将上例代码中的bytes([0])改为bytes(0),观察结果有何不同,并分析原因。#以二进制读写模式打开文件,设置缓冲区大小为1024字节withopen('d:/z7.png','rb+',buffering=1024)asf:

data=b'\xA6'*2048#创建2048个字节的字节串

f.write(data)#将字节串写入文件的前2048字节【例7.11】将图像文件d:/zw.jpg最后1个字节的数据修改为0【例7.10】参数说明:(1)offest:设置需要移动的字节数。可以是任意整数。为负数时表示向前移动读写位置;为正数表示向后移动读写位置。(2)from:设置移动的开始位置。可以是:0(文件头)、1(当前位置)、2(文件尾)。对于文本文件,这个参数只能是0。7.3.1什么是CSV文件7.1.2文本文件的读写第7章文件处理7.3CSV文件的读写1.定义CSV文件以纯文本形式存储数据,每行代表一条记录,字段之间通常使用逗号作为分隔符,不过也可以使用其他字符,如分号、制表符等。2.

特点以二维表行列结构的形式组织数据简单性:格式简单,易于理解和处理,不需要复杂的解析工具,用文本编辑器就可以直接打开和编辑。通用性:几乎所有的电子表格软件(如Excel、WPS表格等)和数据库管理系统都支持CSV文件的导入和导出,方便在不同的软件和系统之间进行数据交换。轻量级:文件体积相对较小,占用存储空间少,传输和处理速度快,适用于大规模数据的存储和传输。3.应用场景数据备份与恢复:可以将数据库中的数据导出为CSV文件进行备份,在需要时再将CSV文件中的数据导入到数据库中,实现数据的恢复。数据共享与交换:不同部门或不同系统之间经常需要共享数据,CSV文件是一种常用的交换格式。例如,市场部门可以将调研数据以CSV文件的形式发送给数据分析部门进行分析。数据采集与整理:在数据采集过程中,采集到的数据可以直接保存为CSV文件,方便后续的整理和分析。例如,通过网络爬虫采集到的网页数据,通常会保存为CSV文件以便进一步处理。7.3.2

使用csv模块对CSV文件进行读写操作7.1.2文本文件的读写第7章文件处理7.3CSV文件的读写1.使用

csv

模块从CSV文件中读取数据(1)使用reader函数读取CSV文件中的数据语法格式:reader(file,dialect,**kwargs)(2)使用DictReader对象读取CSV文件数据importcsvwithopen('c:/datas.csv',mode='r',newline='',encoding='utf-8')asfile:reader=csv.reader(file)forrowinreader:print(row)【例7.13】读取c:/datas.csv文件的内容DictReader是

csv

模块中的一个类,它提供了一种更为方便的方式读取CSV文件,并将每一行数据转换为字典,其中字典的键是CSV文件的表头(第一行),值是对应列的数据。可以利用该类创建DictReader对象读取CSV文件数据。importcsvwithopen('c:/datas.csv',mode='r',newline='',encoding='utf-8')asfile:dreader=csv.DictReader(file)forrowinreader:#遍历每一行数据print(row)importcsvwithopen('c:/datas.csv',mode='r',newline='',encoding='utf-8')asfile:dreader=csv.DictReader(f,fieldnames=("学号","姓名","年龄"))next(dreader)forrowindreader:print(row)方式一:使用默认参数创建DictReader对象方式二:指定fieldnames参数创建DictReader对象【例7.14】csv.DictReader(file,fieldnames,restkey,restval,dialect,**kwargs)fieldnames用于指定字典的键(可以是列表或元组,默认将CSV文件的第一行作为键)。若CSV列数多于fieldnames,多出的列以restkey为键存入字典;若不足,缺失值用restval填充。返回值:为DictReader对象(是迭代器),可通过迭代逐行得到CSV文件的内容。每行数据会转换为字典。7.3.2

使用csv模块对CSV文件进行读写操作7.1.2文本文件的读写第7章文件处理7.3CSV文件的读写2.使用csv

模块将数据写入CSV文件(1)使用write函数将数据写入CSV文件语法格式:csv.writer(file,dialect,**kwargs)(2)使用DictWriter对象将数据写入CSV文件importcsvdata=[["姓名","年龄","性别"],["王五","23","男"],["赵六","29","男"]]withopen('c:/person.csv',mode='w',encoding='utf-8',newline='')asfile:writer=csv.writer(file)#创建一个写入对象。writer.writerows(data)#写入多行数据【例7.15】将数据写入person.csv文件csv.DictWriter

csv

模块提供的一个类,用于将字典形式的数据写入CSV文件。字典的键对应CSV文件的表头,而字典的值对应每一行的数据。importcsvdata=[{'姓名':'王五','年龄':25,'性别':'男'},{'姓名':'赵六','年龄':30,'性别':'女'}]withopen('output.csv',mode='w',encoding='utf-8',newline='')asfile:fieldnames=['姓名','年龄','性别']writer=csv.DictWriter(file,fieldnames=fieldnames)#创建DictWriter对象writer.writeheader() #写入列名writer.writerows(data)#写入数据

【例7.16】DictWriter(file,fieldnames,restval,extrasaction,dialect,**kwds)参数说明:file为以写入模式(如

'w')打开的CSV文件对象。fieldnames指定表头字段名(字典键),缺失时用restval填充(默认'')。extrasaction控制多余键处理:'raise'(默认报错)或'ignore'。dialect设置CSV格式规则(默认'excel')。

**kwds设置关键字参数,常用关键字参数参阅reader函数部分。返回值:为DictWriter对象,其常用方法有:writeheader():用于写入CSV文件的表头,即

fieldnames

列表中的字段名。writerow(row):将一个字典形式的行数据写入CSV文件。writerows(rows):一次性将多个字典形式行数据写入CSV文件。其构造函数语法如下:7.4.1工作薄对象7.1.2文本文件的读写第7章文件处理7.4使用EXCEL工作薄存取数据openpyxl是一个用于读写Excel2010及以上版本文件(扩展名为

.xlsx)的Python库,通过

Workbook、Worksheet

Cell

等对象模型,可实现对工作簿、工作表、单元格、公式、图表及样式(如字体、颜色、边框)的各类操作。openpyxl库支持内存优化模式,可高效处理大型数据集,广泛应用于数据处理、自动化办公等领域。windows操作系统下,安装

openpyxl

库的命令为:pipinstallopenpyxl在openpyxl库中,Workbook对象代表着一个Excel工作簿。通过Workbook对象,能够轻松创建、读取和修改Excel文件。7.4.1工作薄对象7.1.2文本文件的读写第7章文件处理7.4使用EXCEL工作薄存取数据1.创建Workbook对象(1)通过Workbook类创建Workbook对象语法格式:Workbook(write_only,iso_dates)(2)使用load_workbook函数创建Workbook对象使用openpyxl库中的load_workbook函数可以根据工作薄文件创建Workbook对象。

参数说明:filename设置EXCEL工作薄的文件名称。如果设置read_only为True,只能读取数据。keep_vba设置是否保留文件中VBA工程,默认值为False,不保留。data_only设置单元格的value属性返回的是公式还是公式的计算结果。设置为True,则只返回公式的计算结果。默认值为False。keep_links设置是否保留与其他工作薄的链接。默认值为True,保持链接。通过Workbook类只能创建新的Workbook对象,不能根据工作薄文件创建对象。参数说明:write_only设置是否使用“只写”模式,默认值为False。iso_dates设置是否使用数据镜像(创建备份),默认值为False。返回值:为

Workbook对象,表示工作簿。语法格式:load_workbook(filename,read_only,keep_vba,data_only,keep_links=True)7.4.1工作薄对象7.1.2文本文件的读写第7章文件处理7.4使用EXCEL工作薄存取数据2.Workbook对象的属性和方法名称作用语法格式备注active返回当前活动的工作表对象,也就是打开工作簿时默认显示的工作表属性sheetnames返回一个包含工作簿中所有工作表名称(字符串)的列表属性create_sheet在工作簿中创建新的工作表create_sheet(title,index)title设置工作表名称(字符串);index设置工作表的索引位置(非负整数,默认将新创建的工作表插入到最后)copy_worksheet复制工作表copy_worksheet(worksheet)worksheet为当前操作的工作薄中已存在的工作表对象。不能是其他工作薄中创建的工作表对象。复制后的工作表会被添加到工作簿的末尾。复制的工作表可以通过其title属性设置工作表的名称

remove删除工作表remove(obj)obj为需要删除的工作表对象save保存工作薄save(filename)filename设置EXCEL文件的名称7.4.2工作表对象7.1.2文本文件的读写第7章文件处理7.4使用EXCEL工作薄存取数据EXCEL工作薄由工作表组成。根据创建工作薄的读写模式不同,工作表对象可以分为Worksheet对象、ReadOnlyWorksheet对象和WriteOnlyWorksheet对象。以读写模式创建的Workbook对象(①使用Workbook类并设置

write_only

参数为False创建的Workbook对象。②调用load_workbook函数并设置read_only参数为False创建的Workbook对象),其工作表为Worksheet对象。1.Worksheet对象创建过程说明通过工作表名称获取指定工作表以读写模式创建Workbook对象后,可以通过“Workbook对象名[工作表名]”的方式创建Worksheet对象获取工作薄当前的活动工作表Workbook对象具有active属性,能够得到当前操作的工作表创建新的工作表以读写模式创建Workbook对象后,可以利用该对象的create_sheet方法创建新的Worksheet对象通过表索引创建Worksheet对象Workbook对象的worksheets属性为一个列表,元素为Workbook对象的所有已有的工作表对象。可以通过工作表在该列表中的索引得到Worksheet对象importopenpyxlasxlsxfromosimportstartfile#以读写模式新建工作薄wb=xlsx.Workbook()#新建工作表,插入到最前sheet1

=wb.create_sheet("base_infs",0)#新建工作表,插入到最后sheet2=wb.create_sheet("datas")wb.save("C:/books.xlsx")#保存工作薄wb.close()#关闭工作薄#打开窗口,显示工作薄内容startfile("C:/books.xlsx")【例7.18】(1)创建Worksheet对象7.4.2工作表对象第7章文件处理7.4使用EXCEL工作薄存取数据1.Worksheet对象(2)Worksheet对象的属性title:获取或设置工作表的名称。max_row:返回工作表中已使用的最大行号。min_row:返回工作表中已使用的最小行号。max_column:返回工作表中已使用的最大列号。min_column:返回工作表中已使用的最小列号。(3)Worksheet对象的方法cell(row,column,value):获取第row行第column列的单元格对象。value用于设置的单元格的数据(缺省时不设置数据)。iter_rows(min_row,max_row,min_col,max_col,values_only):按行迭代器。min_row(默认值为1)和max_row(默认值为已使用的最后一行)指定行的范围,min_col(默认值为1))和max_col(默认值为已使用的最后一列)指定列的范围。

values_only的默认值为False,设置为

True,则返回单元格的值而非单元格对象。iter_cols(min_col,max_col,min_row,max_row,values_only):按列迭代器。各参数的作用请参阅iter_rows方法。append(row):在工作表已使用的最后一行之后添加一行数据。row

是可迭代对象(如列表、元组),每个元素对应一个单元格的值。7.4.2工作表对象第7章文件处理7.4使用EXCEL工作薄存取数据1.Worksheet对象importopenpyxlasxlsx wb=xlsx.Workbook() #以读写模式新建工作薄sheet=wb.active #选择活动工作表data=[['学号','姓名','年龄'],[2401,'张三',20],[2426,'李四',18],[2470,'王五',19]]forrowindata:sheet.append(row) #添加3行数据sheet.cell(1,4,"24班") #设置单元格数据forcinsheet.iter_cols(1,3,2,4,True):print(c) #按列输出第1至3列的数据wb.save("E:/students.xlsx") #保存工作薄wb.close() #关闭工作薄

【例7.19】(3)Worksheet对象的方法delete_rows(idx,amount):从行号

idx

开始删除amount(默认值为1)行的数据。delete_cols(idx,amount):从列号

idx开始删除amount(默认值为1)列的数据。merge_cells(start_row,start_column,end_row,end_column):合并指定区域的单元格。unmerge_cells(start_row,start_column,end_row,end_column):取消合并的单元格。insert_cols(idx,amount):插入列。idx设置插入列的起始位置,amount设置插入列的数量(默认值为1)。insert_rows(idx,amount):插入行。idx设置插入行的起始位置,amount设置插入行的数量(默认值为1)。7.4.2工作表对象第7章文件处理7.4使用EXCEL工作薄存取数据importopenpyxlasxlsx wb=xlsx.Workbook() #以读写模式新建工作薄sheet=wb.active #选择活动工作表data=[['学号','姓名','年龄'],[2401,'张三',20],[2426,'李四',18],[2470,'王五',19]]forrowindata:sheet.append(row) #添加3行数据sheet.cell(1,4,"24班") #设置单元格数据forcinsheet.iter_cols(1,3,2,4,True):print(c) #按列输出第1至3列的数据wb.save("E:/students.xlsx") #保存工作薄wb.close() #关闭工作薄

【例7.19】(3)Worksheet对象的方法delete_rows(idx,amount):从行号

idx

开始删除amount(默认值为1)行的数据。delete_cols(idx,amount):从列号

idx开始删除amount(默认值为1)列的数据。merge_cells(start_row,start_column,end_row,end_column):合并指定区域的单元格。unmerge_cells(start_row,start_column,end_row,end_column):取消合并的单元格。insert_cols(idx,amount):插入列。idx设置插入列的起始位置,amount设置插入列的数量(默认值为1)。insert_rows(idx,amount):插入行。idx设置插入行的起始位置,amount设置插入行的数量(默认值为1)。以读写模式创建新的工作薄时会自动创建一个名为"Sheet"的工作表,并且该工作表活动工作表。sheet.iter_cols(1,3,2,4,True)是一个按列迭代的迭代器,表示逐列迭代。第一次迭代,得到的第1列第2至4行的数据(2401,2426,2470)。第二次迭代得到的是第2列第2至4行的数据('张三','李四','王五')。第三次迭代得到的是第3列第2至4行的数据(20,18,19)。7.4.2工作表对象第7章文件处理7.4使用EXCEL工作薄存取数据2.ReadOnlyWorksheet对象以只读模式创建的Workbook对象(即调用load_workbook函数并设置read_only参数为True创建的工作表对象),其工作表为ReadOnlyWorksheet对象。可以使用创建Worksheet对象的方法,通过已存在的工作表创建ReadOnlyWorksheet对象。但由于Workbook对象为只读模式,因此,不能创建新的工作表。ReadOnlyWorksheet对象的主要成员有:cell、iter_rows、max_column、max_row、min_column、min_row、rows、values。各成员的作用及使用方法参阅Worksheet对象。7.4.2工作表对象第7章文件处理7.4使用EXCEL工作薄存取数据2.WriteOnlyWorksheet对象以只写模式创建的Workbook对象(即使用Workbook类并设置

write_only

参数为True创建的Workbook对象),其工作表为WriteOnlyWorksheet对象。可以使用创建Worksheet对象的方法创建WriteOnlyWorksheet对象。WriteOnlyWorksheet对象只支持使用

append

方法逐行写入数据,不能随机访问或修改已写入的单元格。写入数据后也不能再修改。工作簿保存后,也不能再对其进行写入操作。7.4.3单元格对象第7章文件处理7.4使用EXCEL工作薄存取数据1.创建Cell对象importopenpyxlwb=openpyxl.Workbook()ws=wb.activedata=[['A','B','C'],[1,2,3]]forrowindata:ws.append(row)forrowinws.iter_rows(min_row=1,max_row=2,min_col=1,max_col=3):forcellinrow:print(cell.value) #cell为Cell对象wb.save("E:/datas.xlsx")wb.close() 【例7.20】在

openpyxl

库中,Cell对象是操作Excel工作表的基础元素,代表工作表中的单元格。创建过程说明通过单元格名称创建Cell对象假定st为工作表对象,则st["A1"]即为A1单元格对象使用工作表对象的

cell方法创建Cell对象假定st为工作表对象,则c=st.cell(row=1,column=2)即为A2单元格对象在迭代过程中获取Cell对象使用工作表对象的iter_rows或iter_cols方法时,如果设置参数values_only为False,则遍历时也会返回

Cell

对象7.4.3单元格对象第7章文件处理7.4使用EXCEL工作薄存取数据2.Cell对象的属性(1)value:获取或设置单元格的值。(2)row:返回单元格所在的行号。(3)

column:返回单元格所在的列号。(4)

coordinate:返回单元格的名称(也称坐标)。如

"A1"、"B2

"等。(5)

data_type:返回单元格的数据类型,如

'n'(数字)、's'(字符串)、'b'(布尔值)。设置单元格的数据时,也可以设置为EXCEL公式。如:cell.value="=sum(A1:A8)"7.4.4样式相关对象第7章文件处理7.4使用EXCEL工作薄存取数据1.Font对象Font

对象可由openpyxl.styles模块中的Font类创建,用于设置单元格的字体样式,如字体名称、大小、颜色、加粗、倾斜等。语法格式:Font(**args)在openpyxl中,样式相关对象为用于设置或调整Excel单元格的字体样式、对齐方式、边框样式、填充样式等外观,以满足多样化的视觉需求。importopenpyxlfromopenpyxl.stylesimportFontwb=openpyxl.Workbook()ws=wb.activefont=Font(name='Arial',size=12,bold=True,color='FF0000')forrowinws.iter_rows(min_row=1,max_row=2,min_col=1,max_col=3):forcellinrow:cell.font=fontwb.save("E:/datas.xlsx")wb.close() 【例7.21】7.4.4样式相关对象第7章文件处理7.4使用EXCEL工作薄存取数据2.Alignment

对象Alignment

对象可由openpyxl.styles模块中的Alignment类创建,用于设置单元格的对齐方式,如水平对齐、垂直对齐、文本换行等。语法格式:Alignment(**args)importopenpyxlfromopenpyxl.stylesimportAlignmentwb=openpyxl.Workbook()ws=wb.activealignment=Alignment(horizontal='center',vertical='center',wrap_text=True)forrowinws.iter_rows(min_row=1,max_row=2,min_col=1,max_col=3):forcellinrow:cell.alignment=alignmentwb.save("E:/datas.xlsx")wb.close() 【例7.22】7.4.4样式相关对象第7章文件处理7.4使用EXCEL工作薄存取数据3.Border和

Side对象Border和

Side对象可由openpyxl.styles模块中的Border和Side类创建,用于设置单元格的边框样式。语法格式:Side(style,color)、Border(**args)importopenpyxlfromopenpyxl.stylesimportBorder,Sidewb=openpyxl.Workbook()ws=wb.activeside=Side(style='thin',color='FF0000')border=Border(left=side,right=side,top=side,bottom=side)forrowinws.iter_rows(min_row=2,max_row=6,min_col=2,max_col=5):forcellinrow:cell.border=borderwb.save("E:/datas.xlsx")wb.close() 【例7.23】7.4.4样式相关对象第7章文件处理7.4使用EXCEL工作薄存取数据3.PatternFill

对象PatternFill

对象由openpyxl.styles模块中的PatternFill类创建,用于设置单元格的填充样式,如纯色填充、渐变填充等。语法格式:PatternFill(fill_type,start_color,end_color)7.5综合应用案例第7章文件处理7.4使用EXCEL工作薄存取数据1.文本文件分析与处理【问题描述】1.使用GB18030编码,创建文件D:/z7y1.txt并输入以下内容。Hello,World!Thisisasampletextfile.Itcontainsmultiplelinesoftext.Pythonisagreatlanguagefortextprocessing.打开文件D:/z7y1.txt,统计文件内容的行数、单词数和字符数(含空格,但不含换行符)。【案例分析】可以定义以下函数完成文件的相关操作:writefile:将需要的数据写入文件。定义3个参数:file:设置需要写入数据的文本文件名称。datas:需要写入的数据(字符串)。encode:数据的编码方式。函数实现思路:以"w"模式打开文本文件,调用文件对象的内置方法write写入数据。readfile。读取文件的全部数据。定义2个参数:file:设置需要读取数据的文本文件名称。encode:数据的编码方式。函数实现思路:以"r"模式打开文本文件,调用文件对象的read方法读取文件全部数据,并作为函数值返回。counts:统计文件内容的行数、单词数和字符数。定义1个参数datas,用于传递文件的全部内容(字符串)。函数实现思路:得到各行数据:line=datas.split("\n")遍历line,分别统计行数(含空行)、单词数和字符数(含空格,不含换行符)。7.5综合应用案例第7章文件处理7.4使用EXCEL工作薄存取数据1.文本文件分析与处理【参考代码】defwritefile(file,datas,encode="GB18030"):#写数据到文件withopen(file,'w',encoding=encode)asf:f.write(datas)defreadfile(file,encode="GB18030"):#从文件读取数据withopen(file,encoding=encode)asfile:returnfile.read()defcounts(datas):#统计字符串datas中的行数、单词数和字符数line=datas.split('\n')#得到各行数据lines=0#行数初值words=0#单词数初值chars=0#字符数初值forrinline:#遍历各行lines+=1#行数更新ifr:#不是空行时word=r.split()#用空格分割行数据,能够自动处理多余的空格words+=len(word)#单词数更新chars+=len(r)#字符数更新returnlines,words,chars#以元组形式返回统计结果text="""Hello,World!Thisisasampletextfile.Itcontainsmultiplelinesoftext.Pythonisagreatlanguagefortextprocessing."""#多行文本writefile("d:/z7y1.txt",text)#写文本到文件datas=readfile("d:/z7y1.txt")#从文件读取全部数据fx=counts(datas)#统计print("统计结果:")print(f"行数:{fx[0]}")print(f"单词数:{fx[1]}")print(f"字符数:{fx[2]}")【拓展训练】优化代码,考虑以下情形:中间标点符号之后无空格。统计字符数时不包

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论