一:打开、关闭文件
1.打开文件:f=open('文件路径','模式')
2.操作:写入、读取、修改===》模式
3.关闭:f.close() ====》释放内存空间复制
例1:读取文件
# 1.打开文件
f=open('file01.txt','r') # 文件对象 # mode='r'(默认模式为r) ===》如果是r+表示可读不写
print(f)
# 2.读取文件
print(f.read()) # read()复制
# 3.关闭 f.close()复制
运行截图:
例2:写入
# w+ 可读可写 f=open('file012.txt','w+') # 文件对象 # 写入:只可以写字符串,写入之后会覆盖原有的内容 f.write('123eeex\n3432fp\n')复制
例3:
f=open('file04.txt','a+') #追加 # f=open('file01.txt','ab+') # 加个b的作用:以二进制的格式打开文件,进行上述操作 # f2=open('file01.txt','r+') #追加 f.write('yod3') f.flush() # f.write('wee') #f.writelines([1,2,3]) # TypeError: write() argument must be str, not int f.writelines(['1\n','5']) # 写入多行(需要自己加换行符) # f.write(b'abc') f.seek(3) # 移动光标 print(f.read()) # 读取光标以后的内容 # print(f2.readline()) # 读取一行 # print(f2.readlines()) # 读取多行 # li=f2.readlines() # print(li[0]) # 列表 # f3=open('file01.txt','r+') #追加 # f3.write('abc') # print(f3.tell()) # 获取游标的位置 # f4=open('file01.txt','r+') #追加 # f4.write('abc') # f4.flush() # 刷新缓存复制
二:StringIO与 BytesIO(了解)
import io # 字符串 sio=io.StringIO() # 创建假文件(字符串对象) print(sio) # <_io.StringIO object at 0x000001E120A40A68> sio.write('abcd4w') # 写入 print(sio.getvalue()) # 读取 print('-----------------------------') # 写入 二进制 sioo=io.BytesIO() sioo.write(b'werty') print(sioo.getvalue()) print(sioo.getvalue().decode('utf-8'))复制
运行截图:
三:上下文管理
文件一般流程如下:
1.打开文件
2.操作文件
3.关闭文件
如果把《操作文件部分》放在上下文管理方法中,无需每次都写打开、关闭文件复制
# 上下文管理 class Test: # 最开始调用 def __enter__(self): # 自动调用这两个方法 #print('正在使用enter') return 'enter 返回' def __exit__(self, exc_type, exc_val, exc_tb): # 最后调用这个方法 print('z正在使用exit') # 上下文 with Test() as t: # print(t) # enter 返回 print(t)复制
运行截图:
注意事项:
通过上下文管理无需手动再次写关闭操作,操作完成自动关闭释放内存空间(底层帮我们已经做了),这样写让代码更加简洁清晰明了!复制
# with 打开文件 as 别名 这样写不用手动关闭文件 (别名:可以当做是一个被赋值的变量) with open('file03.txt','w+') as f: f.write('123')复制
操作多文件:
with open('file03.txt','w+') as f,open('file01.txt','r') as f1: f.write('123') # f写入 print(f1.read()) # f1读出复制
必须掌握:with..as的用法和特点
四:os模块 的目录及文件操作
import os print(os.getcwd()) # 显示当前路径 D:\py学习01\python基础\文件 print(os.listdir()) # 展示当前目录内容 print(os.listdir('D:\py学习01\python基础\文件')) # 展示当前目录内容 # 改变路径 os.chdir('D:\py学习01\python基础\文件1') # 目录要有文件1 print(os.getcwd()) # 创建目录(文件夹) os.mkdir('file04.py') # 删除文件 # os.remove('file04.py') # file04.py是目录无法删除,应该删除的是目录下面的文件复制
运行截图:
os.path模块 的路径操作
# 路径拼接: os.path.join(path1,path2….) print(os.path.join('py学习01','python基础')) # py学习01\python基础 # 是否是目录: os.path.isdir # 文件就是目录 # 是否是文件: os.path.isfile print(os.path.isdir('D:\py学习01\python基础\文件1')) # True # 文件夹才是路径 print(os.path.isdir('D:\py学习01\python基础\文件\file.py')) # False # print(os.path.isfile('D:\py学习01\python基础\文件\文件01.py')) # True print(os.path.isfile('D:\py学习01\python基础\文件')) # False复制
运行截图:
练习:
1.写一个简单的复制文件代码
'''
思路:
1.打开文件:open
2.读取内容并保存在变量中:read
3.写入另一个文件中:write
'''复制
with open('file01.txt','r') as f,open('file03.txt','w') as f2: a=f.read() # print(a) f2.write(a) # 写入复制
2. 写一个用来遍历某目录所有内容的函数
'''
# 1.目录就是文件夹
# 2.内容===》文件
# 3.函数就是方法
# 4.传一个路径,是文件就遍历,如果是目录继续进入目录
'''复制
import os def list_all(path): list_path=os.listdir(path) # 打印文件名 print(os.listdir(path)) ''' ['04.py', 'file.py', 'file01.txt', 'file012.txt', 'file02.txt', 'file03.txt', 'file04', 'file04.py', '__init__.py', '文件01.py', '文件02.py', '文件03.py', '文件04.py'] ''' for i in list_path: # 目录与文件名拼接 full_path=os.path.join(path,i) # 对拼接后的地址判断,如果是目录继续遍历,否则直接打印文件名 if os.path.isdir(full_path): # 继续遍历 list_all(full_path) else: print(i) # print(path) list_all('D:\py学习01\python基础\文件')复制
运行截图: