Python程序设计教程课件第七章 文件 课件(共40张PPT)

资源下载
  1. 二一教育资源

Python程序设计教程课件第七章 文件 课件(共40张PPT)

资源简介

(共40张PPT)
第7章 文件
Chap7 Files
There is a road in the mountains of books, and diligence is the path
程序中的数据
2
or
a 23 D
文件基本概念
7.1
3
文件基本概念
文件:存储在某种介质上的信息集合
存储:外部介质
识别:文件名
分类
存取方式:顺序存取,随机存取
文件内容表示方式:二进制文件,文本文件
4
7.1.1 python文件系统
5
二进制文件与文本文件
二进制文件与文本文件
文本形式输出时
一个字节与一个字符一一对应
便于对字符进行逐个处理,也便于输出字符;
占存储空间较多;
要花费转换时间。
用二进制形式输出时
可节省外存空间和转换时间
一个字节并不对应一个字符,不能直接输出字符形式。
可读性差,常用于保存中间结果数据和运行程序。
二进制文件与文本文件
Python中可以处理二进制文件以及文本文件,对二进制文件的操作可以选择是否使用缓冲区
缓冲区是内存中的区域,当程序中需要进行频繁的文件读写操作时,使用缓冲区可以减少I/O操作从而提高效率,也方便管理
文本文件均使用缓冲区处理
8
7.1.2 文件的使用过程
9
文件的使用过程
文件读写
打开文件
open
关闭文件
close
read/write
文件的打开和关闭
7.2
11
7.2.1 文件的打开
12
文件的打开
13
>>> f1 = open('d:\\infile.txt')
>>> f2 = open('d:/outfile.txt', 'w')
>>> f3 = open('frecord.csv', 'ab', 0)
Source
file_obj = open(filename, mode='r', buffering=-1)
mode为可选参数,默认值为r
buffering也为可选参数,默认值为-1(0代表不缓冲,1或大于1的值表示缓冲一行或指定缓冲区大小)
其他常用参数:encoding(指定编码字符集)
open()函数返回一个文件(file)对象
open()函数-mode
模式 功能Function
r 以读模式打开,文件必须存在
w 以写模式打开,若文件不存在则新建文件,否则清空原内容
x 以写模式打开,若文件已经存在则失败
a 以追加模式打开,若文件存在则向结尾追加内容,否则新建文件
r+ 以读写模式打开
w+ 以读写模式打开(清空原内容)
a+ 以读和追加模式打开
rb 以二进制读模式打开
wb 以二进制写模式打开(参见w)
ab 以二进制追加模式打开(参见a)
rb+ 以二进制读写模式打开(参见r+)
wb+ 以二进制读写模式打开(参见w+)
ab+ 以二进制读写模式打开(参见a+)
14
标准文件
当程序启动后,以下三种标准文件有效
stdin
标准输入
stdout
标准输出
1
2
3
stderr
标准错误
15
>>> newcName = input('Enter the name of new company: ')
Enter the name of new company: Chaolihai
>>> print(newcName)
Chaolihai
Source
7.2.2 文件的关闭
16
关闭文件
fp.close()
fp为文件对象
切断文件对象与外存储器中文件之间的联系
17
>>> fp = open(r'd:\nfile.txt', 'r')
>>> type(fp)

>>> fp.name
'd:\\nfile.txt'
>>> fp.mode
'r'
>>> fp.closed
False
>>> fp.close()
>>> fp.closed
True
Source
关闭文件
文件使用完后如果不关闭,则当程序运行结束时由系统自动关闭
不建议使用系统自动关闭的原因
操作系统允许程序同时打开的文件个数是有限的
写入内容已处理完若缓冲区还未满,缓冲区的内容要等到程序运行结束时由系统自动关闭该文件后才能写出,此时若系统发生非正常情况当前缓冲区中的未写到外存储上的内容就可能丢失掉
18
文件的基本操作
7.3
19
文件的基本操作
返回值和基本操作
open()函数返回一个文件(file)对象
文件对象可迭代
有许多读写相关的方法/函数
f.read(), f.write(), f.readline(), f.readlines(), f.writelines()
f.seek()
20
7.3.1 文件的读写
21
读文件-read()方法
s = fp.read(size)
从文件当前位置读取size字节数据,若size为负数或空,则读取到文件结束
返回一个字符串(文本文件)或字节流(二进制文件)
22
>>> fp = open(r'd:\firstpro.txt')
>>> s = fp.read(5)#读取5字节
>>> print(s)
Hello
>>> s = fp.read()#将文件中余下的数据读出
>>> s
', World!\nHello, Python!'
>>> fp.close()
Source
在π(前10000位)中寻找自己的生日
23
# Filename: find_birth.py
fp = open('pi.txt')
pi = fp.read()
if '1111' in pi:
print('66666')
else:
print('55555')
File
在网络上搜索π的前10000位数据放到文件中
读文件-readline()方法
24
s = fp.readline(size=-1)
从文件当前位置读取本行内size字节数据,若size为默认值或大小超过当前位置到行尾字符长度,则读取到本行结束(包含换行符)
返回读取到的字符串内容
>>> fp = open(r'd:\firstpro.txt')
>>> s = fp.readline(20)
>>> s
'Hello, World!\n'
>>> s = fp.readline(2)
>>> s
'He'
>>> s = fp.readline()
>>> s
'llo, Python!'
>>> fp.close()
Source
firstpro.txt :
Hello, World!
Hello, Python!
读文件-readlines()方法
25
lines = fp.readlines(hint=-1)
从文件当前读写位置开始读取需要的字节数,至少为一行;若hint为默认值或负数,则读取从当前位置到文件末尾的所有行(包含换行符)
返回从文件中读出的行组成的列表
>>> fp = open(r'd:\companies.txt')
>>> lines = fp.readlines(2)
>>> lines
['NIKE Inc.\n']
>>> lines = fp.readlines()
>>> lines
['Microsoft Corporation\n', 'Apple Inc.\n', ' Visa Inc.']
>>> fp.close()
Source
写文件-write()方法
fp.write(s)
向文件中写入数据(字符串或字节流)
返回写入的字符数或字节数
26
>>> fp = open(r'd:\firstpro.txt', 'w')
>>> fp.write("Hello, World!\n")
14
>>> fp.write("Hello, Python!")
14
>>> fp.close()
Source
>>> f = open(r'd:\firstpro.dat', 'wb')
>>> x = bytes([3, 4, 5])
>>> f.write(x)
>>> f.close()
Source
写文件-writelines()方法
fp.writelines(lines)
向文件中写入列表数据,多用于文本文件
27
>>> fp = open(r'd:\companies1.txt', 'w')
>>> lines = ['NIKE Inc.\n', 'Microsoft Corporation\n', 'Apple Inc.\n', 'Visa Inc.\n']
>>> fp.writelines(lines)
>>> fp.close()
Source
文件读写例子7.1
# Filename: prog7-1.py
f1= open('d:\companies.txt')
lines = f1.readlines()
f1.close()
for i in range(len(lines)):
lines[i] = str(i+1) + ' ' + lines[i]
f2 = open('d:\scompanies.txt', 'w')
f2.writelines(lines)
f2.close()
File
Output:
1 GOOGLE Inc.
2 Microsoft Corporation
3 Apple Inc.
4 Facebook, Inc.
将文件companies.txt 的字符串前加上序号1、2、3、…后写到另一个文件scompanies.txt中。

28
7.3.2 文件的定位
29
文件的定位-seek()方法
fp.seek(offset , whence=0)
fp打开的文件必须允许随机访问
在文件中移动文件指针,从whence(0表示文件头部,1表示当前位置,2表示文件尾部)偏移offset个字节
whence参数可选,默认值为0
返回当前的读写位置
30
文件的定位-seek()方法
31
>>> s
b'word!'
>>> fp.seek(3, 0)
3
>>> fp.read(3)
b'lo,'
>>> fp.seek(2, 1)
8
>>> fp.read(3)
b'rd!'
Source
>>> fp = open('testseek.dat', 'wb+')
>>> fp.write(b'Hello,word!')
11
>>> fp.seek(0)
0
>>> s = fp.read(5)
>>> s
b'Hello'
>>> fp.seek(-5, 2)
6
>>> s = fp.read()
Source
文件读写例子改写
# Filename: prog7-2.py
f= open('companies.txt', 'r+')
lines = f.readlines()
for i in range(len(lines)):
lines[i] = str(i+1) + ' ' + lines[i]
f.seek(0)
f.writelines(lines)
f.close()
File
Output:
1 GOOGLE Inc.
2 Microsoft Corporation
3 Apple Inc.
4 Facebook, Inc.
将文件companies.txt 的字符串前加上序号1、2、3、…。

32
文件的定位-tell()方法
fp.tell()
返回文件的当前读写位置
33
>>> fp = open('testseek.dat', 'rb+')
>>> fp.tell()
0
>>> fp.read(5)
b'Hello'
>>> fp.tell()
5
>>> fp.close()
Source
7.3.3 文件的其他操作
34
文件的其他方法及属性
35
方法 功能
f.flush() 将写缓冲区的数据写入文件
f.truncate(size=None) 将文件截取为给定大小的字节(如果未指定大小,则为当前文件读写位置)。当前文件读写位置没有改变
f.closed 文件关闭属性,当文件关闭时为True,否则为False
f.fileno() 返回文件描述符(整数)
f.readable() 判断文件是否可读,是返回True,否返回False
f.writable() 判断文件是否可写,是返回True,否返回False
f.seekable() 判断文件是否支持随机访问,是返回True,否返回False
f.isatty() 判断文件是否交互(如连接到一个终端设备),是返回True,否返回False
文件异常处理
36
with open('companies.txt', 'r+') as f:
lines = f.readlines()
for i in range(len(lines)):
lines[i] = str(i+1) + ' ' + lines[i]
f.seek(0)
f.writelines(lines)
Source
文件综合例
读取成绩文件score.txt,分别计算语文、数学、英语的最高分、最低分、平均分并输出到显示终端上,同时在score.txt添加一列计算出每位同学的总成绩。

37
姓名,语文,数学,英语
陈纯,88,87,85
方小磊,93,88,90
王妤,82,99,96
彭子晖,97,94,84
丁海斌,97,94,76
姓名,语文,数学,英语,总分
陈纯,88,87,85,260
方小磊,93,88,90,271
王妤,82,99,96,277
彭子晖,97,94,84,275
丁海斌,97,94,76,267
文件综合例
38
# Filename: prog7-3.py
def f(listdata, n, flag = 'max'):
m = listdata[0][n]
if flag == 'max':
for item in listdata:
if item[n] > m:
m = item[n]
elif flag == 'min':
for item in listdata:
if item[n] < m:
m = item[n]
elif flag == 'ave':
m = 0
for item in listdata:
m += item[n]
m /= len(listdata)
return m
File
def stas(x, field):
print(' {:5s}{:5s}{:5s}'.format(field[1],field[2],field[3]))
print('最高分:{:5d}{:5d}{:5d}'.format(f(x, 1), f(x, 2), f(x, 3)))
print('最低分:{:5d}{:5d}{:5d}'.format(f(x, 1, 'min'), f(x, 2, 'min'), f(x, 3, 'min')))
print('平均分:{:5.1f}{:5.1f}{:5.1f}'.format(f(x, 1, 'ave'), f(x, 2,'ave'),f(x, 3, 'ave')))
File
文件综合例
39
if __name__ == "__main__":
with open("score.txt", 'r+') as fp:
lines = fp.readlines()
field = lines.pop(0).split(',')
x = []
for eachline in lines:
t = eachline.split(',')
for j in range(1, len(t)):
t[j] = int(t[j])
x.append(t)
stas(x, field)
for i in range(len(x)):
lines[i] = lines[i].strip() + ',' + str(x[i][1] + x[i][2] + x[i][3]) + '\n'
field[-1] = field[-1].strip()
field.append('总分\n')
lines.insert(0, ','.join(field))
print(lines)
fp.seek(0)
fp.writelines(lines)
File
小结
文件的打开
文件打开模式与文件类型
文件的关闭
文件的读写
文件定位
40

展开更多......

收起↑

资源预览