一、文件读写操作 - 内置函数
1.打开文件 - open()
1.1 参数说明:
open(file,mode,buffering,encoding)
1)file: 打开的文件
2)mode:打开的模式
‘rt’:(默认)只能打开纯文本文件
‘wt’:只能写入纯文本文件(覆盖式写入)
'rb':可以打开纯文本、音频、视频文件
'wb':可以写入纯文本、音频、视频文件
'a':可以在文件内容后面写入新的内容(不覆盖写入)
3)buffering:分配的缓存
4)encoding:编码类型(若打开的文件中有中文,那么要注明 encoding = ' utf-8')
1.2 使用说明
`open() ------> 返回值:stream(管道)
注意:1、如果输入的 path\filename 不存在,会报错:FileNotFoundError
2、file = open()之后,一定要 file.close()
2.读取文件 - read功能函数
stream.read() :读取所有内容 ------ > 返回全部内容
stream.readable() :判断是否可读 ------> 返回一个 bool 类型
stream.readline() :每次读取一行内容并且加一个空行 ------> 返回一行内容
stream.readines() :读取所有的行,保存到列表中[’’,’’.’’] ------> 返回一个list
注意:1、凡是设计返回值的,都要定义一个容器来装。
2、 当读取完之后,指针会停在末尾,不能再次读取。
3.写入文件 - write功能函数
注意:此时 open() 中 mode 要改类型。
stream.write(内容):每次都会覆盖原来的内容
stream.writelines(Iterable):没有换行的效果,自己加\n 比如:stream.writelines([“刘德华\n”,“周星驰\n”,“胡歌”])
4.自动释放内存资源写法格式
with open("gray1.jpg","rb") as stream:
"""
可以自动释放资源,即无需file.close()
"""
5.获取文件名 - path.rfind()
path = r'D:\Study\python_文件\os.path\os.path.py'
file = path[path.rfind('\\') + 1:]
print(file)
说明:从右往左,截止至第一个’\‘,后面一个元素就是文件名
二、文件读写操作 - os 模块
1.开头注明:
import os
2.绝对路径和相对路径
绝对路径:"D:\Study\python_文件\gray1.jpg" # 从硬盘出发寻找
相对路径:"../image/gray2.jpg"
# 以当前文件为参考点出发。如果找的文件非同级,当前文件必须回到同级文件。
# 每'../'就是回一级。
python_文件-data | gray1.jpg (当前文件)(相对路径:’…/image/gray2.jpg’)
|
| image —gray2.jpg (目标文件)–|
3.判断是否为绝对路径 - os.path.isabs()
r = os.path.isabs()-- 测试是否是绝对路径,返回布尔类型
绝对路径:
r = os.path.isabs("D:\Study\python_文件\gray1.jpg")
print("r:", r)
>>> True
4.获取文件的文件夹路径(截止到文件夹)
4.1 os.path.dirname(文件名)
比如:注:file 是当前文件
path = os.path.dirname(__file__)
print(path)
4.2 os.getcwd(文件名)
path = os.getcwd() # 不填,就默认当前文件
5.文件夹判断 - os.path.isdir()
os.path.isdir(path) ---> 返回布尔类型
比如:
path = r'D:\Study\python_文件\copy3'
os.path.isdir(path) --- 判断 copy3 是是否是文件夹
6.找到文件的找到绝对路径 - os.path.abspath()
6.1 通过相对路径 — 得到绝对路径
path = os.path.abspath('readme.txt') ---> 返回'readme.txt'的绝对路径
6.2 找到当前文件的绝对路径
path = os.path.abspath(__file__) ---> 返回'当前文件'的绝对路径
7.如何获取文件名
7.1 os.path.split()
path = r'D:\Study\python_文件\os.path\os.path.py'
result = os.path.split(path) # 返回一个元组
print(result[1])
注意:返回的元组(文件夹路径,文件名)
7.2 path.rfind() — 见上
8.输出文件大小 - os.path.getsize()
result = os.path.getsize(path)
print(result)
9.拼接函数 - os.path.join(path, *paths)
'file','readme1.txt' -- 两层 -- D:\Study\python_文件\os.path\file\readme1.txt
result = os.path.join(os.getcwd(),'file','readme1.txt')
注意:od.getcwd() 是基础路径,file ,readme1.txt —> file\readme1.txt
三、综合操作
1.文件复制
with open("gray1.jpg","rb") as stream:
container = stream.read() # 读取文件内容
with open("gray2.jpg",'wb') as wstream:
wstream.write(container)
print("文件复制成功。")
2.文件夹复制
2.1 文件夹 copy1 中只有纯文件,把copy1 复制到 copy2 中
def copy(src, target):
if os.path.isdir(src) and os.path.isdir(target):
file_list = os.listdir(src)
# 遍历文件夹中的所有文件,重复读和写操作
for file in file_list:
path = os.path.join(src, file)
with open(path, 'rb') as read_stream:
container = read_stream.read()
path1 = os.path.join(target, file)
with open(path1,'wb') as write_stream:
write_stream.write(container)
else:
print('copy finished')
2.2 文件夹 copy3 中含有 文件夹 copy 3.1,把copy3 复制到 copy2 中
src_path = r'D:\Study\python_文件\copy3'
target_path = r'D:\Study\python_文件\copy2'
def copy(src,target):
# 获取目录里的内容列表
filelist = os.listdir(src)
print(filelist)
# 遍历列表
for file in filelist:
# 拼接路径
path = os.path.join(src,file)
# 判断是文件夹还是文件
if os.path.isdir(path):
# 是文件夹就更新路径
scr1 = os.path.join(src,file)
target1 = os.path.join(target,file)
# 在目标文件中创建这个文件夹
os.mkdir( target1)
# 递归调用
copy(scr1,target1)
else:
# 不是文件夹就直接复制
with open(path, 'rb') as read_stream:
container = read_stream.read()
path1 = os.path.join(target, file)
with open(path1,'wb') as write_stream:
write_stream.write(container)
else:
print('copy finished')
另:转载注明出处