1、Slide 1-1Python程序设计程序设计文件文件Slide 1-2Python程序设计程序设计文件文件在很多应用中,永久保存数据是很重要在很多应用中,永久保存数据是很重要的的解决数据永久性保存的有效方式是使用解决数据永久性保存的有效方式是使用文件文件文件是存放在计算机外存上的一组相关信息的文件是存放在计算机外存上的一组相关信息的集合集合每个文件都有一个名字,通过文件名,可以找到对应的每个文件都有一个名字,通过文件名,可以找到对应的文件文件引言引言2023-2-16Slide 1-3Python程序设计程序设计文件文件两种两种类型的文件:文本文件和二进制文件。类型的文件:文本文件和二进制文
2、件。文本文件文本文件由一个字符序列构成。十进制整数由一个字符序列构成。十进制整数199199,在文本文件中存储为三个字符,在文本文件中存储为三个字符11、99、99构成的字符序列(假设字符集为构成的字符序列(假设字符集为ASCIIASCII),占),占3 3个个字节字节二进制二进制文件由一个二进制字节序列构成。十进制整数文件由一个二进制字节序列构成。十进制整数199199,在二进制文件中存储为,在二进制文件中存储为1100011111000111(十进制的(十进制的199199等于二进制的等于二进制的1100011111000111),),占占1 1个个字节字节 程序对文件进行操作时,需要考虑
3、该文件是文本文件还是二进制程序对文件进行操作时,需要考虑该文件是文本文件还是二进制文件文件计算机并不会区分文本文件和二进制文件。所有的文件都以二进制格式存储计算机并不会区分文本文件和二进制文件。所有的文件都以二进制格式存储,因此,因此实际上所有的文件都是二进制文件实际上所有的文件都是二进制文件Slide 1-4Python程序设计程序设计文件文件2023-2-16打开文件打开文件创建一个和物理文件相关的文件对象:创建一个和物理文件相关的文件对象:fileVariable=open(filename,mode)open函数为文件函数为文件filename返回文件对象返回文件对象fileVaria
4、ble,文件模式文件模式mode指定如何打开文件指定如何打开文件文件模式可以组合。如文件模式可以组合。如r+以读写方法打开文件,以读写方法打开文件,rb以只读方式打开二进制文件以只读方式打开二进制文件关闭文件关闭文件切断和物理文件的联系,释放打开文件时占用的资源:切断和物理文件的联系,释放打开文件时占用的资源:fileVariable.close()文件模式文件模式描述描述r以只读方式打开文件(默认)w以只写方法打开文件。若文件不存在,则新建文件;如果文件已存在,则清空文件原有内容x以独占只写方式打开文件。若文件不存在,则新建文件;如果文件已存在,则抛出FileExistsError异常a以只
5、写方法打开文件。若文件不存在,则新建文件;如果文件已存在,在文件原有内容末尾追加内容b二进制文件模式t文本文件模式(默认)+更新(读写)方式打开文件Slide 1-5Python程序设计程序设计文件文件2023-2-16文件对象的属性文件对象的属性一旦创建了文件对象,就一旦创建了文件对象,就可以可以使用使用文件文件对象对象如下如下属性:属性:属性属性描述描述closed若文件已经关闭,返回True,否则返回Falsemode返回打开文件的模式name返回打开文件的文件名Slide 1-6Python程序设计程序设计文件文件2023-2-16输入输入输出输出方法方法描述描述read(size)从
6、文件中读取size指定的字节数。若未给定size或size为负数,则读取所有内容readline(size)从文件中读取一整行,包括n字符。若指定了非负数的size参数,则返回指定大小的字节数,包括n字符readlines(sizehint)以行为单位从文件中读取所有内容(直至文件末尾),自动将文件内容解析成一个行的列表,返回行的列表。若指定了非负数的sizehint参数,则返回总和大约为sizehint字节数的行的列表方法方法描述描述write(str)向文件中写入指定字符串,不会自动在字符串末尾添加n字符,str表示要写入文件的字符串writelines(sequence)向文件中写入一序
7、列的字符串,例如字符串列表,不会自动在字符串末尾添加n字符Slide 1-7Python程序设计程序设计文件文件2023-2-16写入数据写入数据使用上下文管理使用上下文管理with语句。在使用语句。在使用with语句的程序中,调用了语句的程序中,调用了open函数,但没有调用函数,但没有调用close函数。只管打开文件,并在需要时使用它,函数。只管打开文件,并在需要时使用它,Python自会在合适的时候自动将其关闭自会在合适的时候自动将其关闭测试文件是否测试文件是否存在存在在在打开打开文件前文件前可以检测该文件是否可以检测该文件是否存在。存在。os.path模块中的模块中的isfile函数可
8、以用来判断一个文函数可以用来判断一个文件是否存在件是否存在sys.exit()引发引发一一个个SystemExit异常,若没有异常,若没有捕获这个异常捕获这个异常,会,会直接直接退出程序;退出程序;捕获这捕获这个异常可以做一些额外的清理个异常可以做一些额外的清理工作工作Slide 1-8Python程序设计程序设计文件文件2023-2-16读取读取数据数据Slide 1-9Python程序设计程序设计文件文件2023-2-16追加数据追加数据读写数值数据读写数值数据为了向文件中写入数字,首先要将它们转为了向文件中写入数字,首先要将它们转换为字符串,然后利用换为字符串,然后利用write方法将它
9、们写方法将它们写入文件。为了入文件。为了能从文件中正确能从文件中正确读取数字,读取数字,写入时利用空白符来分隔数字写入时利用空白符来分隔数字因为数字被空白符分隔,字符串的因为数字被空白符分隔,字符串的split方法方法能够将该字符串分解成列表,从列表中获能够将该字符串分解成列表,从列表中获取数字并显示取数字并显示Slide 1-10Python程序设计程序设计文件文件2023-2-16可以向文件写入数字和字符串。那么可以向文件直接写入像列表这样的任何可以向文件写入数字和字符串。那么可以向文件直接写入像列表这样的任何对象吗?答案是肯定的。对象吗?答案是肯定的。Python的的pickle模块用于
10、序列化和反序列化对象。序列化是指将一个对象转换为能够存储模块用于序列化和反序列化对象。序列化是指将一个对象转换为能够存储在文件中或在网络上进行传输的字节流的过程。反序列化则相反,指的是从字节流中提在文件中或在网络上进行传输的字节流的过程。反序列化则相反,指的是从字节流中提取取出出对象的过程对象的过程Python中的所有数据都是对象。可以通过使用中的所有数据都是对象。可以通过使用pickle模块的模块的dump和和load函数来写入函数来写入/读取读取任何数据任何数据Slide 1-11Python程序设计程序设计文件文件2023-2-16Slide 1-12Python程序设计程序设计文件文件
11、2023-2-16检测文件末尾检测文件末尾若不知道文件中有多少对象,那么如何读取文件的所有对象?若不知道文件中有多少对象,那么如何读取文件的所有对象?可以使用可以使用load函数重复读取对象直到抛出函数重复读取对象直到抛出EOFError异常(到达文件末尾)。当抛出这个异常(到达文件末尾)。当抛出这个异常时,捕获并处理它以结束文件读取过程异常时,捕获并处理它以结束文件读取过程Slide 1-13Python程序设计程序设计文件文件顺序访问和随机访问顺序访问和随机访问每个文件都有一个每个文件都有一个文件指针文件指针当打开文件时,当打开文件时,文件文件指针指针一般一般指向文件开头;读写文件时,指向
12、文件开头;读写文件时,文件文件指针指针会会自动顺自动顺序推进,直至文件末尾。这种访问文件的方式称为顺序访问序推进,直至文件末尾。这种访问文件的方式称为顺序访问方式方式直接跳到文件的某个位置进行读写操作,而不是从头到尾顺序进行读写操作。直接跳到文件的某个位置进行读写操作,而不是从头到尾顺序进行读写操作。这种访问文件的方式称为随机访问这种访问文件的方式称为随机访问方式方式文件定位文件定位2023-2-16Slide 1-14Python程序设计程序设计文件文件seek方法方法使用文件对象使用文件对象的的成员成员方法方法seek,可以随意移动可以随意移动文件指针到文件指针到指定的指定的位置位置fil
13、eObject.seek(offset,whence)参数参数offset表示以表示以whence为基准移动的偏移量(以字节为为基准移动的偏移量(以字节为单位),正单位),正偏移量表示从偏移量表示从whence开始向文件末尾方向移动,负偏移量表示从开始向文件末尾方向移动,负偏移量表示从whence开始向文件开头方向移动开始向文件开头方向移动参数参数whence指定从哪个位置开始计算偏移量,有下列几种情况:指定从哪个位置开始计算偏移量,有下列几种情况:0,文件开头(默认);文件开头(默认);1,文件当前位置;,文件当前位置;2,文件末尾,文件末尾tell方法方法返回文件返回文件指针当前位置指针当前位置 fileObject.tell()文件定位文件定位2023-2-16Slide 1-15Python程序设计程序设计文件文件文件定位文件定位2023-2-16Slide 1-16Python程序设计程序设计文件文件2023-2-16sys模块模块中中提供提供getsizeof函数来函数来计算对象计算对象的的大小,返回对象大小,返回对象所占用的所占用的字节字节数数