周报4

删除指定文件夹中指定类型的文件
05P14.py】
l 本例代码修改后可用于清理系统中的临时垃圾文件或
其他指定类型的文件,稍加扩展还可以删除大小为0
字节的文件,大家可以自行补充和完成
from os.path import isdir, join, splitext
from os import remove, listdir
filetypes = ['.tmp', '.obj', '.exe'] #指定要删除的文件类型
def delCertainFiles(directory):
if not isdir(directory):
return
for filename in listdir(directory):
temp = join(directory, filename)#自动处理末尾的\
if isdir(temp):
delCertainFiles(temp) #递归调用
elif splitext(temp)[1] in filetypes: #检查文件类型
remove(temp)
#删除文件
print(temp, ' deleted....')
文件与文件夹1
15
5
GIF图像文件判断【
05P15.py】
l 一般文件都具有专门的文件头结构,其中就包括该文
件的类型
l >>> def is_gif(fname):
l f = open(fname, 'rb')
l first4=f.read(4)
l f.close()
l return first4==b'GIF8'
l >>> print(is_gif('D:\\search.gif'))
l True
l >>> print(is_gif('D:\\dir1.txt'))
l False
文件与文件夹1
6
16
文件的概念
l 文件是长久保存信息并允许重复使用和反复修改的重
要方式,同时也是信息交换的重要途径。数据库文件、
图像文件、音频视频文件、可执行文件、office文档、
动态链接库文件等等,都以文件的形式存储在不同的
存储设备(例如磁盘、优盘、光盘、云盘等等)上
l 文本文件
l 文本文件存储的是常规字符串,由若干文本行组成,通常每
行以换行符'\n'结尾。常规字符串是指记事本之类的文本编辑
器能正常显示、编辑并且人类能够直接阅读和理解的字符串,
如英文字母、汉字、数字等。扩展名为.txt、.log、.ini的文件
都属于文本文件,可以使用字处理软件如记事本进行编辑
l 二进制文件
l 常见的二进制文件如图形图像文件、音视频文件、可执行文
件、数据库文件、office文档等。二进制文件把信息以字节
串(bytes)进行存储,无法用记事本等普通字处理软件直接进
行编辑,需要使用对应的软件进行解码后读取、显示、修改
或执行。例如,使用Windows记事本打开Python主程序
pythonw.exe,由于这个文件是二进制可执行文件,使用记事
本查看时显示乱码
文本文件与二进制文件17
1
7
文件的打开与关闭
l 文件操作步骤:打开、读写、关闭
l 文件的打开:
open(file, mode='r', buffering=1, encoding=None,
errors=None,newline=None, closefd=True, opener=None)
l file参数指定了被打开的文件名称
l mode参数指定了打开文件后的处理方式
l buffering参数指定了读写文件的缓存模式。0表示不缓存,1
表示行缓存,如大于1则表示缓冲区的大小。默认值是行缓
存模式
l encoding参数指定对文本进行编码和解码的方式,只适用于
文本模式,可使用Python支持的任何格式,如GBK、utf8等
l 如正常open()函数返回文件对象,通过该文件对象对
文件进行读写。如果文件不存在、访问权限不够、磁
盘空间不足或其他原因导致创建失败则抛出异常
l f1 = open( 'file1.txt', 'r' ) # 以读模式打开文件
l f2 = open( 'file2.txt', 'w') # 以写模式打开文件
l 文件操作完一定要关闭文件对象,这样才能保证修改都被保存
l
f1.
clo
se
()
文本文件与
文件1
18
8
文件缓存机制与文件打开模式
l 小提示:缓存机制使得修改文件时不需要频繁地进行
磁盘文件的读写
件,或者调用
f
lu
sh
()方
盘文件,缓冲机
长磁盘使用寿命
l 注意:即使我们写了关闭文件的代码,也无法保证文
件一定能够正常关闭,例如在打开文件之后和关闭文
件之前发生了错误导致程序崩溃
l 文件打开模式
文本文件与二进制文件
模式
说明
r
读模式(默认模式,可省略),如果文件不存在则抛出异常
w
写模式,如果文件已存在,先清空原有内容
x
写模式,创建新文件,如果文件已存在则抛出异常
a
追加模式,不覆盖文件中原有内容
b
二进制模式(可与其他模式组合使用)
t
文本模式(默认模式,可省略)
+
读、写模式(可与其他模式组合使用)19
1
9
文件对象属性与方法-1
属性
属性说明
buffer
返回当前文件的缓冲区对象
closed
判断文件是否关闭,若文件已关闭则返回True
fileno
文件号,一般不需要太关心这个数字
mode
返回文件的打开模式
name
返回文件的名称
方法
功能说明
close()
把缓冲区的内容写入文件,同时关闭文件,并释放文件对象
detach()
分离并返回底层的缓冲,底层缓冲被分离后,文件对象不再可用,不
允许做任何操作
flush()
把缓冲区的内容写入文件,但不关闭文件
read([size])
从文本文件中读取size个字符(
Python 3.x)的内容作为结果返回,或
从二进制文件中读取指定数量的字节并返回,如果省略size则表示读取
所有内容
readable()
测试当前文件是否可读
readline()
从文本文件中读取一行内容作为结果返回
文本文件与二进制文件2
0
20
文件对象属性与方法-2
方法
功能说明
readlines()
把文本文件中的每行文本作为一个字符串存入列表中,返回该列表,
对于大文件会占用较多内存,不建议使用
seek(offset[,
whence])
把文件指针移动到新的字节位置,offset表示相对于whence的位置。
whence为0表示从文件头开始计算,1表示从当前位置开始计算,2表
示从文件尾开始计算,默认为0
seekable()
测试当前文件是否支持随机访问,如果文件不支持随机访问,则调用
方法seek()、tell()和truncate()时会抛出异常
tell()
返回文件指针的当前位置
truncate([size]) 删除从当前指针位置到文件末尾的内容。如果指定了size,则不论指
针在什么位置都只留下前size个字节,其余的一律删除
write(s)
把s的内容写入文件
writable()
测试当前文件是否可写
writelines(s)
把字符串列表写入文本文件,不添加换行符
文本文件与二进制文件2
1
2
1
文件操作案例-1
l 文件对象是可以迭代的
l >>> with open('sample.txt') as fp:
l for line in fp:
#读取并显示文本文件所有行
l print(line)
l 文本文件写入内容
l >>> s = 'Hello 刘 立 嘉\n'
l >>> f = open('sample.txt', 'w+') #打开文件
l >>> f.write(s) #写入文件内容
l >>> f.close() #关闭文件
l 读取文本文件内容
l >>> fp = open('sample.txt')
l >>> print(fp.read(4))
#从当前位置读取前4个字符
l Hell
l >>> print(fp.read(4))
#英文字符和汉字一样对待
l o 刘
l >>> print(fp.read())
#从当前位置读取后面的所有内容
l
l
>>
>
fp.
clo
se
()
#关闭文件对象
文本文
件与
件2
2
22
文件操作案例-2
l 移动文件指针
l >>>fp = open('sample.txt', 'r+')
l >>>print(fp.tell()) #返回文件指针的当前位置
l 0
l >>>print(fp.read(7)) #读取7个字符
l Hello 刘
l >>>fp.seek(6) #重新定位文件指针的位置
l >>>print(fp.read(5))
l 刘 立 嘉
l >>>fp.close() #关闭文件
l 读取文本文件d
at
a1
.tx
t
(文
个整数)
d
at
a1
_a
sc.
txt中
l with open('data1.txt') as fp :
l data = fp.readlines()
l data.sort(key=int)
l with open('data1_asc.txt' , 'w') as fp:
l fp.writelines(data)
文本文件与二进制文件2
23
3
文件操作案例-3【
05P23.py】
l 文件data.txt中整数之间用英文逗号分隔,程序读取
所有整数升序排序后再写入文本文件data_asc.txt
l with open('data.txt', 'r') as fp:#读取所有行
l data = fp.readlines()
l data = [line.strip() for line in data]#删除每行
两侧的空白字符
l data = ','.join(data)
#合并所有行
l data = data.split(',')
#分割得到所有数字
l data = [int(item) for item in data if
item!='']#转换为数字
l data.sort()
#升序排序
l data = ','.join(map(str,data))#将结果转换为字符串
l with open('data_asc.txt', 'w') as fp:#写入文件
l fp.write(data)
文本文件与二进制文件24
2
4
文本操作案例-4【
05P24.py】
l 由python程序文件demo.py生成文件demo_new.py,其
内容与demo.py一致,但是在每行的行尾加上了行号
l filename = 'demo.py'
l with open(filename, 'r') as fp:
l lines = fp.readlines()
#读取所有行
l maxLength = max(map(len,lines))
#最长行的长度
l for index, line in enumerate(lines): #遍历所有行
l newLine = line.rstrip()
#删除每行右侧的空白符
l newLine = newLine + ' '*(maxLength+5-len(newLine))#在每
行固定位置添加行号
l newLine = newLine + '#' + str(index+1) + '\n'#添加行号
l lines[index] = newLine
l with open(filename[:-3]+'_new.py', 'w') as fp:#将结果写入文件
l fp.writelines(lines)
posted @ 2022-03-27 17:06  我的未来姓栗山  阅读(31)  评论(0编辑  收藏  举报