Python程序设计及人工智能应用 课件 07 文件和数据格式化_第1页
Python程序设计及人工智能应用 课件 07 文件和数据格式化_第2页
Python程序设计及人工智能应用 课件 07 文件和数据格式化_第3页
Python程序设计及人工智能应用 课件 07 文件和数据格式化_第4页
Python程序设计及人工智能应用 课件 07 文件和数据格式化_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

第七章文件和数据格式化文件的使用01数据的格式化和处理02文件的使用操作系统对数据进行管理是以文件为单位的,当访问磁盘等外存上的数据时,必须先按文件名找到指定的文件,然后再从该文件中读取数据;如果要向外部介质上存储数据,也必须先建立一个文件,才能向其输出数据。文件和目录文件是存储在外部介质上的数据集合,通常可以长久保存,也称为磁盘文件文件是通过目录来组织和管理的,目录提供了指向对应磁盘空间的路径地址目录一般采用树状结构,在这种结构中,每个磁盘有一个根目录,它包含若干文件和子目录。基本概念【例7-1】绝对路径示例。假定文件file.txt保存在D:盘lecture5目录的ex子目录下,那么包含绝对路径的文件名是由磁盘驱动器、目录层次和文件名三部分组成的,即D:\lecture5\ex\file.txt,在Python中用字符串表示为:"D:\\lecture5\\ex\\file.txt"或"D:/lecture5/ex/file.txt"【例7-2】相对路径示例。假定文件file.txt保存在D:盘的lecture5目录的ex子目录下,源程序保存在D:盘的lecture5目录下,那么包含相对路径的文件名表示为ex\file.txt,在Python语言中用字符串表示为:"ex\\file.txt"或"ex/file.txt"文件的编码Python3.x版本中,文件的默认编码格式是UTF-8,字符串使用的是Unicode编码。所有的文本类型,都使用Unicode编码,可以直接使用str.encode()进行编码,encode()后可看到字符的UTF-8编码,再使用bytes.decode()可解码为文本按照文件的编码方式,可将文件分为文本文件和二进制文件程序中对文件的操作一般包括:打开文件读取文件对文件数据进行处理写入文件关闭文件文件操作文件的打开和关闭<文件对象>=open(<文件名>[,<模式>])模

式含

义r以只读方式打开w以写方式打开一个文件,若这个文件已存在,则覆盖原来的内容;若这个文件不存在,则创建这个文件x创建一个新文件,以写方式打开,若文件已存在,则报错FileExistsErrora以写方式打开,写入内容追加在文件的末尾b表示二进制文件,添加在其他控制字符后t表示文本文件,默认值+以修改方式打开,支持读/写表7-1文件的打开方式【例7-3】以读/写二进制模式打开当前目录下的文件示例。

importosos.chdir('D:\\python')f=open('workfile.txt','rb+')文件的定位文件定位语句seek(),可以帮助我们实现文件的随机读/写。f.seek(<偏移值>[,<起始位置>])其中,起始位置为0表示自文件起始处开始(默认值,可省略),1表示从当前文件指针位置开始,2表示从文件末尾开始。【例7-4】随机访问二进制文件示例。importos#导入os模块,用于执行操作系统相关任务os.chdir('d:\\python')#更改当前工作目录到d:\pythonf=open('workfile.txt','rb+')#以二进制读写模式打开文件workfile.txtprint(f.write(b'Beatwarwithyourvices'))#向文件中写入字节字符串b'Beatwarwithyourvices‘#write()方法返回写入的字节数print(f.seek(6))#将文件指针移动到第6个字节的位置print(f.read(3))#从当前指针位置读取3个字节print(f.seek(-5,2))#从文件末尾向前移动5个字节print(f.read(4))#从当前指针位置读取4个字节f.close()#关闭文件,释放系统资源【例7-5】随机访问文本文件示例。importosos.chdir('d:\\python')#创建并写入文件file=open('workfile1.txt','w',encoding='utf-8')file.write('微风送来淡淡花香')file.close()#读取文件的特定部分file=open('workfile1.txt','r',encoding='utf-8')print(file.read(4))#读取4个字符file.seek(0)#返回文件开头print(file.read(8))#读取最后8个字符file.close()文件的读取、写入、追加本节讲解Python语言中读取文件和写入文件的基本方法,以下内容假设已经创建了一个文件对象f。1.从文件读取数据Python为文件的读取提供了三种文件对象方法,方法的返回值即为读取的内容,可以根据返回值的不同,保存到相应类型的变量中。(1)f.read(size)方法该方法返回一个字符串,内容为长度为size的文本。数字类型参数size表示读取的字符数,可以省略。如果省略size参数,则表示读取文件所有内容并返回。如果已到达文件的末尾,f.read()将返回一个空字符串('')。例如:

importosos.chdir('d:\\python')f=open('workfile1.txt','r+t')#以文本读写模式打开文件print(f.read())#从当前指针位置读取文件内容f.close()#关闭文件(2)f.readline()方法该方法返回一个字符串,内容为文件的当前一行。换行符(\n)留在字符串的末尾。如果已到达文件的末尾,f.readline()将返回一个空字符串('')。如果是一个空行,则返回'\n'。例如:importosos.chdir('d:\\python')f=open(‘workfile.txt’,‘r+t’)#以文本读写模式打开文件print(f.readline())#从当前指针位置读取一行数据f.close()#关闭文件从文件中读取行,更高效的方法是在文件对象上循环。这不但可以节省内存,而且代码也更简洁。例如:importosos.chdir('d:\\python')f=open('workfile.txt','r+t')#以文本读写模式打开文件f.seek(0)forlineinf:print(line,end='')f.close()#关闭文件(3)f.readlines()方法该方法返回一个列表,列表中的每个字符串类型元素对应文件的每行(包括结尾的换行符“\n”)。例如:importosos.chdir('d:\\python')f=open('workfile.txt','r+t')#以文本读写模式打开文件print(f.readlines())f.close()#关闭文件针对不同的数据组织方式,可选用不同的方法读入数据,此外,对于只需读入数据的场合,Python还提供了快速列表访问方式:<列表>=list(open(<文件名>))将一个文件中的数据读入一个列表中,一行一个元素,读入的数据类型是字符串对象。文件的打开和读取合二为一,也不必使用文件的关闭操作。例如:>>>L=list(open('workfile.txt'))>>>L['宝剑锋从磨砺出\n','梅花香自苦寒来\n']2.将数据写入文件f.write(string)方法将字符串string的内容写到f对应的文件中,并返回写入的字符数。但write语句不会自动换行,如果需要换行,则要使用换行符'\n'。例如:importosos.chdir('d:\\python')f=open('workfile.txt','w')f.write('宝剑锋从磨砺出\n')f.close()#关闭文件其中,'\n'代表一个字符。以w模式打开的workfile.txt文件的原有内容将被覆盖。3.将数据追加到文件末尾例如:importosos.chdir('d:\\python')f=open('workfile.txt','a')f.write('梅花香自苦寒来\n')f.close()以a模式打开workfile.txt文件,指针会移到末尾处,写入的内容将追加到该文件中,但是必须关闭文件才能生效02数据的格式化和处理Python的数据格式化7.2百分号格式化:可以通过如下语法,完成字符串和变量的快速拼接。7.2.1Python的字符串格式化其中的,%s%表示:我要占位s表示:将变量变成字符串放入占位的地方所以,综合起来的意思就是:我先占个位置,等一会有个变量过来,我把它变成字符串放到占位的位置name="Alice"message="%sisstudying"%nameprint(message)Python的数据格式化7.2数字类型也可以进行占位7.2.1Python的字符串格式化多个变量占位变量要用括号括起来并按照占位的顺序填入,这里是将数字转换成了字符串lesson_num=42quiz_score=88message="数学课程第%s课,小测验得分:%s分"%(lesson_num,quiz_score)print(message)Python的数据格式化7.2Python中,其实支持非常多的数据类型占位,最常用的是如下三类:7.2.1Python的字符串格式化格式符号转化%s将内容转换成字符串,放入占位位置%d将内容转换成整数,放入占位位置%f将内容转换成浮点型,放入占位位置book_title="魔法入门"publish_year=2006price=19.99message="%s这本书出版于%d年,现在的售价是¥%.2f"%(book_title,publish_year,price)print(message)Python的数据格式化7.2str.format()方法:Python中一种更强大的字符串格式化方式。它通过

{}

作为占位符,可以按位置索引(如

{0}、{1})或名称(如

{name}、{age})来指定内容,同时还支持复杂的格式化操作,例如对齐、填充、精度控制等。7.2.1Python的字符串格式化name="Alice"age=25message="Hello,{}!Youare{}yearsold.".format(name,age)print(message)pi=3.14159formatted_pi="Pi的值是{:.2f}".format(pi)#保留两位小数print(formatted_pi)Python的数据格式化7.2f-string

格式化(推荐使用)通过在字符串前添加

f

前缀,可以直接在字符串中嵌入变量或表达式。f-string

使用

{}

作为占位符,并在其中直接写入变量名或表达式,Python会在运行时自动计算并替换为对应的值。7.2.1Python的字符串格式化#示例2:嵌入表达式a=5b=10result=f"{a}+{b}的结果是{a+b}"print(result)name="Alice"age=25message=f"Hello,{name}!Youare{age}yearsold."print(message)Python的数据格式化7.2在字符串格式化中,除了替换变量内容外,还可以通过格式符对字符串的宽度、对齐方式、精度等进行控制:(1)百分号格式化:语法:"%[对齐][宽度][.精度]格式符"示例:

7.2.1Python的字符串格式化#右对齐,占10个字符宽度formatted_str="%10s"%"Alice"print(f"'{formatted_str}'")#输出:'Alice'#左对齐,占10个字符宽度formatted_str="%-10s"%"Alice"print(f"'{formatted_str}'")#输出:'Alice'#浮点数保留两位小数pi=3.14159formatted_pi="%.2f"%piprint(formatted_pi)#输出:3.14'Python的数据格式化7.2在字符串格式化中,除了替换变量内容外,还可以通过格式符对字符串的宽度、对齐方式、精度等进行控制:(2)str.format()

方法:语法:"{:[对齐][宽度][.精度]}"示例:

7.2.1Python的字符串格式化#左对齐,占10个字符宽度formatted_str="{:<10}".format("Alice")print(f"'{formatted_str}'")#输出:'Alice'#右对齐,占10个字符宽度formatted_str="{:>10}".format("Alice")print(f"'{formatted_str}'")#输出:'Alice'#居中对齐,占10个字符宽度formatted_str="{:^10}".format("Alice")print(f"'{formatted_str}'")#输出:'Alice'#浮点数保留两位小数pi=3.14159formatted_pi="{:.2f}".format(pi)print(formatted_pi)#输出:3.14Python的数据格式化7.2在字符串格式化中,除了替换变量内容外,还可以通过格式符对字符串的宽度、对齐方式、精度等进行控制:(3)f-string

格式化:语法:f"{变量:[对齐][宽度][.精度]}"示例:

7.2.1Python的字符串格式化#左对齐,占10个字符宽度name="Alice"formatted_str=f"{name:<10}"print(f"{formatted_str}")#输出:'Alice‘#右对齐,占10个字符宽度formatted_str=f"{name:>10}"print(f"{formatted_str}")#输出:'Alice'#浮点数保留两位小数value=3.14159formatted_value=f"{value:.2f}"print(formatted_value)#输出:3.14#数字前补零,占5个字符宽度number=42formatted_number=f"{number:05}"print(formatted_number)#输出:00042Python的数据格式化7.2百分号格式化:百分号(%)格式化是Python中一种传统的字符串格式化方法,主要用于对数字进行简单格式化。它通过

%

运算符和格式符来指定占位内容,常见的格式符包括:%d:格式化整数(DecimalInteger)。%f:格式化浮点数(Float),默认保留6位小数。%.nf:保留指定小数位数,例如

%.2f

表示保留2位小数。7.2.2Python的数字格式化#示例1:格式化整数number=42.3formatted_number="Thenumberis%d"%numberprint(formatted_number)#输出:Thenumberis42#示例2:格式化浮点数(默认保留6位小数)pi=3.1415926535formatted_pi="piis%f"%piprint(formatted_pi)#输出:piis3.141593#示例3:保留指定小数位数price=123.456formatted_price="price:%.2f"%priceprint(formatted_price)#输出:price:123.46Python的数据格式化7.2str.format()方法:

{:.nf}用于设置小数位数,其中n表示要保留的小数位数。例如,使用{:.2f}将保留两位小数。{:>n}实现右对齐,n指定总字符宽度,内容将在指定宽度内右侧对齐。{:<n}实现左对齐,n指定总字符宽度,内容将在指定宽度内左侧对齐。{:^n}实现居中对齐,n指定总字符宽度,内容将在指定宽度内居中显示。

7.2.2Python的数字格式化price=123.456formatted_price="price:{:.2f}".format(price)print(formatted_price)#输出:Price:123.46#对齐格式化示例number=42right_aligned="Number:{:>10}".format(number)left_aligned="Number:{:<10}".format(number)center_aligned="Number:{:^10}".format(number)print(right_aligned)print(left_aligned)print(center_aligned)#多个参数格式化示例name="Alice"balance=1234.5678message="Dear{},yourbalanceis{:.2f}".format(name,balance)print(message)#输出:DearAlice,yourbalanceis1234.57Python的数据格式化7.2f-string格式化:完全继承了str.format()方法的功能,保持了一致的语法规则。在花括号内可以直接编写变量名和格式说明符,使用冒号分隔。

7.2.2Python的数字格式化price=123.456formatted_price=f"Price:{price:.2f}"print(formatted_price)#输出:Price:123.46#变量和表达式嵌入name="Alice"age=25message=f"Hello,{name}!Nextyearyouwillbe{age+1}yearsold."print(message)#输出:Hello,Alice!Nextyearyouwillbe26yearsold.#对齐和格式化组合number=42right_aligned=f"Number:{number:>10}"left_aligned=f"Number:{number:<10}"print(right_aligned)#输出:Number:print(left_aligned)#输出:Number:42#复杂表达式示例items=['apple","banana"']total=123.45summary=f"shoppingcarthas{len(items)}itemswithtotal${total:.2f}"print(summary)#输出:Shoppingcarthas2itemswithtotal$123.45Python的数据格式化7.2科学记数法:科学计数法(ScientificNotation)是表示非常大或非常小数字的标准方法,在Python中可以通过格式说明符'e'或'E'来实现这种表示方式。这种格式化选项将数字转换为科学计数法的形式,即a×10^n的格式,其中a是一个介于1和10之间的数,n是指数。7.2.2Python的数字格式化#基本科学计数法格式化number=1234567scientific="{:.2e}".format(number)print(scientific)#输出:1.23e+06#不同精度的科学计数法precise_scientific="{:.4e}".format(number)print(precise_scientific)#输出:1.2346e+06#处理小数small_number=0.00000123small_scientific="{:.2e}".format(small_number)print(small_scientific)#输出:1.23e-06#组合使用对齐和科学计数法measurements=[1234567,0.00000123,9876543210]formeasurementinmeasurements:print(f"测量值:{measurement:>12.2e}")Python的数据格式化7.2CSV格式文件:逗号分隔值(Comma-SeparatedValues,CSV)是一种文本文件格式,它使用逗号来分隔值,并用换行符来分隔记录。CSV文件以纯文本形式存储表格数据(数字和文本),其中文件的每一行通常代表一条数据记录。每条记录由相同数量的字段组成,这些字段在CSV文件中通过逗号分隔。如果字段定界符本身可能出现在一个字段内,则该字段可以用引号括起来。CSV文件常用的定界符包括逗号、制表符、空格和分号。即使字段分隔符不是逗号,分隔符分隔的文件也经常被赋予“.csv”扩展名。许多用于消费或生成CSV文件的应用程序或库有选项可以指定一个替代的分隔符。

7.2.3Python的csv文件处理Python的数据格式化7.2Python写CSV格式文件:生成的文件内容即写入的内容:

7.2.3Python的csv文件处理Python的数据格式化7.2自动创建employees.csv

7.2.3Python的csv文件处理importcsv#1.先自动创建employees.csvdata=[["姓名","部门","工资"],["张三","研发部","8000"],["李四","市场部","6500"],["王五","人事部","5500"],["赵六","财务部","7200"]]withopen(r"f:\2026年春季\employees.csv","w",encoding="gbk",newline="")asf:writer=csv.writer(f)#创建csv写入器对象

writer.writerows(data)#批量写入多行表格数据#2.用reader读取(列表形式)print("===csv.reader读取===")withopen(r"f:\2026年春季\employees.csv","r",encoding="gbk")asfile:csv_reader=csv.reader(file)#创建csv读取器对象

headers=next(csv_reader)#读取第一行表头,指针下移一行

print(f"文件列标题:{headers}")#输出表头内容

forrowincsv_reader:#循环读取每一行数据

print(f"当前行数据:{row}")#输出每行数据(列表形式)Python的数据格式化7.2Python写CSV格式文件:使用csv.writer写入文件,运行代码后当前工作目录下生成csv文件

7.2.3Python的csv文件处理importcsvfile_path='d:\\python\\employees.csv'#合并写入操作(避免覆盖)data=[#定义列表格式的表格数据,包含表头行

['姓名','部门','工号'],['张三','研发部','001'],['李四','市场部','002']]employee_data=[#定义字典格式的员工数据列表

{'姓名':'张三','部门':'研发部','工号':'001'},{'姓名':'李四','部门':'市场部','工号':'002'}]#使用追加模式保留原有数据,a=追加模式,不清空原有内容withopen(file_path,'a',encoding='gbk',newline='')asfile:csv_writer=csv.writer(file)#创建普通csv写入对象,写入列表数据

csv_writer.writerows(data[1:])#data[1:]切片跳过表头,只写入员工数据

fieldnames=['姓名','部门','工号']#定义字典写入时的表头字段名

dict_writer=csv.DictWriter(file,fieldnames=fieldnames)#创建字典写入对象

dict_writer.writeheader()#写入表头

dict_writer.writerows(employee_data)#批量写入字典格式的多行数据Python的数据格式化7.2Python读CSV格式文件:使用csv.reader读取刚才写好的文件employees.csv:

7.2.3Python的csv文件处理importcsv#导入Python自带的csv模块,用于读取表格文件file_path='f:\\2026年春季\\employees.csv'#设置CSV文件的路径#第一种读取方式:使用csv.reader按列表读取withopen(file_path,'r',encoding='gbk',errors='ignore')asfile:#只读模式,GBK编码,忽略错误字符

csv_reader=csv.reader(file)#创建读取器,把文件按行转成列表

headers=next(csv_reader)#读取第一行表头,读取后跳到下一行

print(f"文件列标题:{headers}")#输出表头内容

forrowincsv_reader:#循环读取每一行数据

print(f"当前行数据:{row}")#输出每行的内容(列表格式)#使用DictReader读取为字典格式(更方便)withopen(file_path,'r',encoding='gbk',errors='ignore')asfile:#再次打开文件

dict_reader=csv.DictReader(file)#创建字典读取器,自动用表头当键

forrowindict_reader:#循环每一行字典数据

print(f"员工姓名:{row['姓名']},部门:{row['部门']}")#按字段名取值输出Python的数据格式化7.2Python处理CSV格式文件:使用csv.reader读取data.csv文件:

7.2.3Python的csv文件处理Python的数据格式化7.2Python处理CSV格式文件:对读取到的数据按需求进行筛选:

7.2.3Python的csv文件处理importcsvfile_path='d:\\python\\data.csv'#示例文件路径#示例数据data=[['name','age','city'],['charlie','35','chicago'],['bob','25','newyork'],['alice','40','losangeles']]#创建示例文件withopen(file_path,'w',encoding='utf-8',newline='')asfile:csv_writer=csv.writer(file)csv_writer.writerows(data)print("示例文件创建成功。")#读取数据并过滤年龄大于30的记录withopen(file_path,'r',encoding='utf-8')asfile:reader=csv.DictReader(file)filtered_data=[rowforrowinreaderifint(row["age"])>30]print("过滤后的数据:")forrowinfiltered_data:print(row)Python的数据格式化7.2Python处理CSV格式文件:对读取到的数据按需求调整格式:

7.2.3Python的csv文件处理importcsvfile_path='d:\\python\\data.csv'#示例文件路径#示例数据data=[['name','age','city'],['charlie','35','chicago'],['bob','25','newyork'],['alice','40','losangeles']]#创建示例文件withopen(file_path,'w',encoding='utf-8',newline='')asfile:csv_writer=csv.writer(file)csv_writer.writerows(data)print("示例文件创建成功。")#读取数据并过滤年龄大于30的记录withopen(file_path,'r',encoding='utf-8')asfile:reader=csv.DictReader(file)filtered_data=[rowforrowinreaderifint(row["age"])>30]print("过滤后的数据:")forrowinfiltered_data:print(f"员工姓名:{row['name']},年龄:{row['age']},所在城市:{row['city']}")Python的数据格式化7.2Python处理CSV格式文件:对读取到的数据处理分析后写入新的csv文件:

7.2.3Python的csv文件处理importcsv#示例文件路径file_path='d:\\python\\data.csv'output_file_path='d:\\python\\filtered_data.csv'#示例数据data=[['name','age','city'],['charlie','35','chicago'],['bob','25','newyork'],['alice','40','losangeles']]#创建示例文件withopen(file_path,'w',encoding='utf-8',newline='')asfile:csv_writer=csv.writer(file)

#创建一个CSV写入器对象csv_writercsv_writer.writerows(

温馨提示

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

评论

0/150

提交评论