day24(2020.3.10):文件IO OS模块

文件IO,正则

文件IO

⽂件读取可分为以下步骤:

  • 打开⽂件 open()
  • 读取⽂件内容 read()
  • 关闭⽂件 close()

  • open(“文件名”,“r”,encoding=“utf-8”)
    在这里插入图片描述
    读写模式分成4个维度理解:是否新建文件,是否能读写,是否覆盖,指针位置
    r,w,a是三种基本模式,代表只读,只覆盖写和只追加写,后两者都会新建文件.三者的指针在开头
    r+,w+,a+是三种增强模式,代表可覆盖读写;w+代表可覆盖读写,新增文件;a+是可追加读写,新增文件.r+文件指针在开头,其他两者的指针在结尾,用fp.seek(0,0)将指针移动到开头.
    r或r+是不会新增文件的,w,w+,r,r+会新增文件,w,w+会覆盖原文件,a,a+会追加到原文件.
    使用读模式打开,就不能用fp.write()方法写入;使用写和追加模式打开,就不能用fp.read()方法读取;使用增强模式才可以读取写入.
    =建议使用a+,可读可写不覆盖,又会新建文件,只要记得用fp.seek(0)将指针移动就可以=
# fp = open("abc.txt",'w',encoding="utf8")    # w只写(覆盖)
# fp = open("abc.txt",'r',encoding="utf8")   # r只读
# fp = open("abc.txt",'a',encoding="utf8")     # a只写(追加)
# fp = open("abc2.txt",'r+',encoding="utf-8")     # r+可读可写,没有文件则报错,否则覆盖,文件指针在开始,如果要读,先将指针移动到开头fp.seek(0,0)
# fp = open("abc.txt",'w+',encoding="utf8")     # w+可读可写,没有文件自动创建,有的话覆盖文件指针在结尾,如果要读,先将指针移动到开头fp.seek(0,0)
fp = open("abc3.txt",'a+',encoding="utf8")     # a+可读可写,没有文件会创建,有的话会追加.追加指针在结尾,如果要读,先将指针移动到开头fp.seek(0,0)
# fp = open("a.img",'wb')     #

for i in range(6,10):
    fp.write("阿里巴巴"+str(i))


fp.seek(0,0)
print(fp.read())   # 读取所有内容
# print(fp.read(2))  # 读取5个字符
  • read(),readline(),readlines()
fp.read()  # 读取所有文本
fp.read(5) # 读取当前指针后5个字符
fp.readline() # 读取一行,直到遇上一个\n
fp.readline() # 读取第二行,直到遇上一个\n
fp.readline(5) # 相当于fp.read(5),读取5个字符,包含\n
fp.readlines() # 读取文本所有行,并将每行输出到一个列表

read()和eadlines()会⼀次读⼊⽂件全部内容,如果⽂件太⼤,会直接耗尽内存
的,因为⽂件对象可迭代,所以可以⽤for循环遍历⽂件读取:

with open('qfile.txt','r',encoding='utf-8') as fp:
	for line in fp:
		print(line.strip()) #注意⽆论是read、readline、readlines都会
	                        # 读⼊⾏末的\n,所以需要⼿动剔除\n

  • close()
    =文件读写后一定要进行关闭操作,以释放资源=
fp.close()

(1) 使用try finally来释放

try:
	fp = open("abc.txt","a+",encoding="utf-8")
	fp.seek(0)
except:
	pass
finally:
	fp.close()

(2)自动关闭文件(with是一种魔术方法)

with open("abc.txt","r+",encoding="utf-8") as fp:
	fp.read()
  • 写入 write() writelines()
fp.write("字符串")  # 写入字符串
fp.flush() # 刷新缓冲区(加速数据的流动,保证缓冲区的流畅)

写入多行writelines()

with open("a.txt","a+",encoding="utf-8") as fp:
    list = ["abc","ccd","adsf","asfasf"]
    data = [i+"\n" for i in list]  #使用列表推异式
    fp.writelines(data)         # 将列表元素写入
    fp.seek(0)
    print(fp.read())


  • 移动文件指针 seek() file_obj.seek(offset,whence=0)
    offset是偏移量,相对于文件开头的,正数表示指针从头往尾移动,负数相反,为0则指针会在文件开头,
    whence是文件指针的位置,可选参数,只能为0
fp.seek(0,0) #指针在文件开头
fp.seek(0)  # 指针在文件开头
fp.tell() # 显示指针位置

OS模块

os模块是内置模块,使用import os导入
下表函数标黑的重要:
在这里插入图片描述
常用操作:

  • 递归遍历目录
# 递归遍历目录
for root,dirnames,files in os.walk(os.getcwd()):
    # print(root,dirnames)   # root即当前目录,dirname是子目录列表
    print(files)          #  files 当前目录的文件列表
    # print(root)
    print(dirnames)         # 文件名

路径拼接(django常用)

os.path.join(os.getcwd(),"a.txt")  
# D:\qianfeng\python_basic\第24天_文件和目录\代码\a.txt

获取文件扩展名

path = os.path.join(os.getcwd(),"a.txt")  # 路径拼接
a = os.path.splitext(path)
if len(a) >= 1:
    print(a)

判断是否文件或目录

print(os.path.isfile("c:\\swapfile.sys"))
print(os.path.isfile("c:\\360Safe"))

判断文件目录是否存在

print(os.path.exists("c:\\360Saf"))
print(os.path.exists("c:\\hiberfil.sys"))

获取文件的大小

print(os.path.getsize("d:\\fib.txt"))  # 1151字节,除以1024才是K,不到1KB,操作系统中显示1.12K
``
获取目录名,文件名,绝对目录

```py
print(os.path.basename("c:\\360Safe\\SoftMgr\\360Newsld.exe")) #最后一级的文件名360Newsld.exe(如果是目录就是目录名,如os.path.basename("c:\\360Safe\\SoftMgr")返回SoftMgr)
print(os.path.dirname("c:\\360Safe\\SoftMgr\\360Newsld.exe"))  # 目录名 c:\360Safe\SoftMgr
print(os.path.abspath("c:\\360Safe\\SoftMgr\\MultiTip.exe")) #绝对路径名c:\360Safe\SoftMgr\MultiTip.exe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值