版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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]}")【拓展训练】优化代码,考虑以下情形:中间标点符号之后无空格。统计字符数时不包含空格,统计行数时不包含空行。捕获并处理异常。7.5综合应用案例第7章文件处理7.4使用EXCEL工作薄存取数据2.成绩统计【问题描述】创建一个新的Excel工作簿,将成绩(见表7.4)写入工作表,要求:1.在“总分”列输入公式,计算每个学生三门课程的总成绩。2.在“平均分”行输入公式,计算每门课程的平均分(四舍五入保留2位小数)。3.设置单元格边框样式:外框双实线、内框单实线。【案例分析】1.将数据保存到EXCEL工作薄根据案例需求,可以按以下步骤设计程序:(1)使用openpyxl库,创建一个新的Workbook对象。(2)将7.3成绩表中的全部数据先保存到一个列表中,列表的元素为元组,对应一行数据。包括总分和平均分的计算公式。为了表格显示效果,数据从B2单元格开始。(3)选择工作薄的活动工作表,将数据插入到该工作表中。2.边框样式的设置基本思路:(1)定义二个Side对象。side1为双实线样式,side2为单实线样式。(2)以单元格区域B2:G9创建行迭代器并遍历,根据每个单元格的行列位置创建Border对象:如果单元格位于第2行,则Border对象的top属性值为side1,否则为side2。如果单元格位于第9行,则Border对象的bottom属性值为side1,否则为side2。如果单元格位于第2列,则Border对象的left属性值为side1,否则为side2。如果单元格位于第6列,则Border对象的right属性值为side1,否则为side2。7.5综合应用案例第7章文件处理7.4使用EXCEL工作薄存取数据2.成绩统计【参考代码】importopenpyxlfromopenpyxl.stylesimportFont,Border,Sidewb=openpyxl.Workbook()ws=wb.activedatas=[['','','','','',''],['','学号','数学','语文','英语','总分'],['',20240001,76,72,85,'=sum(C3:E3)'],['',20240002,90,81,67,'=sum(C4:E4)'],['',20240003,63,70,92,'=sum(C5:E5)'],['',20240004,45,66,80,'=sum(C6:E6)'],['',20240005,78,70,52,'=sum(C7:E7)'],['',20240006,86,61,78,'=sum(C8:E8)'],['','平均分','=round(average(C3:C8),2)','=round(average(D3:D8),2)','=round(average(E3:E8),2)','']]forrowindatas:ws.append(row)side1=Side(style='double')side2=Side(style='thin')forrowinws.iter_rows(min_row=2,max_row=9,min_col=2,max_col=6):forcellinrow:border=Border()border.top=side1ifcell.row==2elseside2border.bottom=side1ifcell.row==9elseside2border.left=side1ifcell.column==2elseside2border.right=side1ifcell.column==6elseside2cell.border=borderwb.save("E:/datas.xlsx")wb.close()【拓展训练】设置成绩区域的条件格式:成绩小于60的,字符红色加粗。提示:利用openpyxl.formatting.rule模块中的CellIsRule类可以创建条件格式规则,并利用工作表的conditional_formatting.add方法将条件格式规则设置到指定的单元格区域。单元总结五大文件处理技术特性矩阵第7章文件处理Thanks!你的名字日期01020304第8章网络爬虫应用基础8.1爬虫技术基础8.2HTTP协议基础8.3网页请求与响应处理的实现8.4网页解析与数据提取的实现058.5综合应用案例8.1爬虫技术基础8.1.1基本概念8.1.2爬虫的基本工作流程8.1.3Python爬虫环境的搭建第8章网络爬虫应用基础8.1.1基本概念8.1爬虫技术基础网络爬虫,又称网络蜘蛛(WebSpider)或网络机器人(WebRobot,Bot),是一种自动获取网页信息的程序或脚本。爬虫技术(WebCrawling)是指通过编写自动化程序或脚本,模拟浏览器行为,访问互联网的网页,快速、自动地获取互联网上的各种结构化或非结构化数据的技术。1.爬虫技术的定义2.爬虫技术的应用搜索引擎数据采集与分析内容聚合应用开发价格监控与比价社交媒体数据分析学术研究与数据挖掘第8章网络爬虫应用基础8.1.2爬虫的基本工作流程8.1爬虫技术基础确定爬取目标分析目标网站发送HTTP请求接收响应解析数据存储/处理数据第8章网络爬虫应用基础8.1.2爬虫的基本工作流程8.1爬虫技术基础1.确定目标
明确爬虫的任务目标,例如抓取特定网站的数据、监控价格变化或收集新闻内容。确定抓取的范围、频率和数据格式(如HTML、JSON、图片等)。2.分析目标网站
分析目标网站的结构,包括URL规律、页面布局、数据加载方式(静态页面或动态加载)。检查网站的“robots.txt”文件,确保爬虫遵守网站的抓取规则。3.发送HTTP请求
构造HTTP请求(如GET或POST请求),向目标服务器发送请求以获取网页内容。对于动态加载的内容,可能需要模拟浏览器行为(如使用Selenium)或调用API接口。4.接收响应接收服务器返回的HTTP响应,包括状态码、响应头和响应体(如HTML、JSON等数据)。检查状态码(如200表示成功,404表示页面不存在),确保请求成功。5.解析数据
使用解析工具(如BeautifulSoup、lxml、正则表达式)提取目标数据。对于动态内容,可能需要执行JavaScript代码或解析API返回的JSON数据。6.存储数据
将提取的数据存储到本地文件(如CSV、JSON)或数据库(如MySQL、MongoDB)中。根据需求对数据进行清洗、去重和格式化。第8章网络爬虫应用基础8.1.2爬虫的基本工作流程8.1爬虫技术基础确定爬取目标分析目标网站发送HTTP请求接收响应解析数据存储/处理数据处理反爬机制任务调度与监控数据分析与应用第8章网络爬虫应用基础8.1.2爬虫的基本工作流程8.1爬虫技术基础7.处理反爬机制
应对目标网站的反爬虫措施,例如IP封禁、验证码、请求频率限制等。使用代理IP、请求头伪装、验证码识别等技术绕过反爬机制。8.任务调度与监控
设置爬虫的任务调度(如定时抓取、增量抓取)。监控爬虫的运行状态,处理异常情况(如网络中断、数据格式变化)。9.数据分析与应用
对抓取的数据进行分析,生成报告或可视化结果。将数据应用于实际场景,如市场分析、舆情监测、价格监控等。第8章网络爬虫应用基础8.1.3Python爬虫环境的搭建8.1爬虫技术基础Python爬虫的开发通常依赖几个核心库,最常用的有requests、BeautifulSoup、lxml、Selenium和Scrapy等。运行框输入cmd进入命令提示符窗口,安装命令如下所示。1.直接用pip工具安装2.创建虚拟环境pipinstallrequestspipinstallbeautifulsoup4pipinstalllxmlpipinstallseleniumpipinstallscrapy虚拟环境(可选但推荐)可以隔离项目依赖,避免版本冲突。Windows环境下,在项目目录下运行以下命令创建虚拟环境myenv并激活myenv环境。python-mvenvmyenvmyenv\Scripts\activatepython–mpipinstallrequestspython–mpipinstallbeautifulsoup4python–mpipinstalllxmlpython–mpipinstallseleniumpython–mpipinstallscrapy第8章网络爬虫应用基础8.1.3Python爬虫环境的搭建8.1爬虫技术基础如果使用Selenium库进行动态网页爬取,还需要安装适用于浏览器的WebDriver,例如ChromeDriver、GeckoDriver等。WebDriver用于驱动浏览器执行爬虫任务。这里以Chrome浏览器为例介绍安装的基本步骤。3.安装WebDriver(可选)(1)下载:访问/docs/chromedriver/downloads。选择与浏览器版本匹配的ChromeDriver版本进行下载。解压下载的文件,并将chromedriver.exe拷贝到系统的某个文件夹中。(2)设置环境变量:为了方便在Python中调用chromedriver,可以将其路径添加到系统的环境变量中(通过右击【我的电脑】-【属性】-【高级系统设置】-【环境变量】,编辑环境变量,添加chromedriver.exe的安装路径,或者在Selenium代码中直接指定文件所在的路径(假设安装的位置在:C:\path\to\chromedriver.exe):fromseleniumimportwebdriverdriver=webdriver.Chrome(executable_path=r"C:\path\to\chromedriver.exe")8.2HTTP协议基础8.2.1HTTP协议/HTTP协议简介8.2.2HTTP请求与响应的结构第8章网络爬虫应用基础8.2.1HTTP协议/HTTP协议简介8.2HTTP协议基础对于网络爬虫来说,它采集的页面通常使用的是HTTP协议和HTTPS协议。HTTP协议全称为超文本传输协议(HyperTextTransferProtocol),它用于将Web服务器的超文本资源传送到浏览器中。HTTP协议能够高效、准确地传送超文本资源,但浏览器与Web服务器的连接是一种一次性连接,它限制每次连接只能处理一个请求。这意味着每个请求都是独立的,服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。第8章网络爬虫应用基础8.2.2HTTP请求与响应的结构8.2HTTP协议基础HTTP协议(HyperTextTransferProtocol,超文本传输协议)是一种发布和接收HTML页面的方法,其端口号是80。在HTTP协议的基础上增加了SSL层/TLS层就是HTTPS协议(HyperTextTransferProtocoloverSecureSocketLayer/TransportLayerSecurity),因此HTTPS可以看作是HTTP的安全版,其端口号是443。浏览器URL处输入网址浏览器发送HTTP请求到服务器服务器返回HTTP响应浏览器解析响应内容并显示网页第8章网络爬虫应用基础8.2.2HTTP请求与响应的结构8.2HTTP协议基础浏览器向Web服务器发送的信息是一个HTTP请求,每个HTTP请求由请求行、请求头部、空行以及请求数据(有的也称为请求体)这4个部分组成。第8章网络爬虫应用基础8.2.2HTTP请求与响应的结构8.2HTTP协议基础
请求行GET/item/Python/407313HTTP/1.1请求行的内容具体如下。在请求行中,GET表示向服务器请求网络资源时所使用的请求方法,/item/Python/407313表示请求的URL地址,HTTP/1.1表示使用的HTTP版本。第8章网络爬虫应用基础8.2.2HTTP请求与响应的结构8.2HTTP协议基础
请求行常用的请求方法包括GET和POST,其中GET用于请求服务器发送某个资源,POST用于向服务器提交表单或上传文件,表单数据或文件的数据会包含在请求体中。请求方法GET和POST的区别主要体现两个方面。GET请求方法通过请求参数传输数据,最多只能传输2KB的数据;POST请求方法通过实体内容传输数据,可以传输的数据大小没有限制。传输数据大小GET请求方法的参数信息会在URL中明文显示,安全性比较低;POST请求方法传递的参数会隐藏在实体内容中,用户看不到,安全性更高。安全性第8章网络爬虫应用基础8.2.2HTTP请求与响应的结构8.2HTTP协议基础
请求头请求行紧挨的部分就是若干个请求头信息,请求头主要用于说明服务器要使用的附加信息。Host用于指定被请求资源的服务器主机名和端口号。User-Agent用于标识客户端身份,通常页面会根据不同的User-Agent信息自动做出适配,甚至返回不同的响应内容。Accept用于指定浏览器或其他客户端可以接受的MIME文件类型,服务器可以根据该字段判断并返回适当的文件格式。Referer用于标识当前请求页面的来源页面地址,即表示当前页面是通过此来源页面里的链接进入的。第8章网络爬虫应用基础8.2.2HTTP请求与响应的结构8.2HTTP协议基础
请求体请求行紧挨的部分就是若干个请求头信息,请求头主要用于说明服务器要使用的附加信息。用于指定浏览器可以接受的字符集类型。Cookie用于在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现模拟登录。Content-Type用于指出实体内容的MIME类型。Accept-Charse第8章网络爬虫应用基础8.2HTTP协议基础8.2.2HTTP请求与响应的结构Web服务器发送给浏览器的响应信息由4个部分组成,分别是状态行、响应头、空行、以及响应正文。
状态行HTTP/1.1200OK状态行的内容具体如下。在状态行中,HTTP/1.1表示HTTP协议的版本号,200表示响应状态码,OK表示响应状态码的简短描述。第8章网络爬虫应用基础8.2HTTP协议基础8.2.2HTTP请求与响应的结构
状态行响应状态码代表服务器的响应状态,它的作用是告知浏览器请求Web资源的结果,如请求成功、请求异常、服务器处理错误等。响应状态码说明100~199表示服务器成功接收部分请求,要求浏览器继续提交剩余请求才能完成整个处理过程200~299表示服务器成功接收请求并已完成整个处理过程。常见状态码为200,表示Web服务器成功处理了请求300~399表示未完成请求,要求浏览器进一步细化请求。常见的状态码有302(表示请求的页面临时转移至新地址)、307(表示请求的资源临时从其他位置响应)和304(表示使用缓存资源)400~499表示浏览器发送了错误的请求,常见的状态码有404(表示服务器无法找到被请求的页面)和403(表示服务器拒绝访问,权限不够)500~599表示Web服务器出现错误,常见的状态码为500,表示本次请求未完成,原因在于服务器遇到不可预知的情况第8章网络爬虫应用基础8.2HTTP协议基础8.2.2HTTP请求与响应的结构
响应头状态行下面的部分便是若干个响应头信息,关于响应头中的常用字段以及常用值的介绍如下。Cache-Control表示服务器告知浏览器当前的HTTP响应是否可以缓存。Connection表示浏览器是否使用持久HTTP连接。Content-Encoding表示服务器对特定媒体类型的数据进行压缩。Content-Type表示服务器告知浏览器实际返回的内容的内容类型。第8章网络爬虫应用基础8.2HTTP协议基础8.2.2HTTP请求与响应的结构
响应正文响应正文是服务器返回的具体数据,常见的数据是HTML源代码。浏览器在接收到HTTP响应后,会根据响应正文的不同类型进行不同的处理。如果响应正文是DOC文档,这时浏览器会借助安装在本机的Word程序打开这份文档;如果响应正文是RAR压缩文档,这时浏览器会弹出一个下载窗口让用户下载解压软件;如果响应正文是HTML文档,这时浏览器会在自身的窗口中展示该文档。第8章网络爬虫应用基础8.2HTT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年模态分析接触问题解答
- 2026年电商客服招聘笔试题库
- 国外社区延续护理服务模式研究
- 妇科护理患者教育策略
- 养生保健试题及答案详解
- 2026年幼儿园户外体育游戏讲座
- 2026年幼儿园查牙涂氟
- 校园项目质量承诺书8篇
- 智能健康管理系统故障紧急处理指南
- 物料供应短缺应对函(7篇范文)
- 食堂风险评估总结汇报
- 银行客户经理考试:建行对公客户经理考试
- 高考数学考前最后一课(课件)
- 冷却塔降噪施工方案本
- 合作协议书范本20XX年
- 2023年浙江杭州萧山区检察院招考聘用司法雇员11人笔试参考题库+答案解析
- 宜昌诚信工贸有限责任公司孙家墩磷矿采矿权出让收益评估报告
- SB/T 10812-2012超市商品基本分类规范
- MT/T 154.8-1996煤矿辅助运输设备型号编制方法
- GB/T 4957-2003非磁性基体金属上非导电覆盖层覆盖层厚度测量涡流法
- GB/T 11944-2012中空玻璃
评论
0/150
提交评论