文件
- 操作模式
- 文件指针的定位
- 遍历
- 其他操作
- 文件相关案例
文件
操作模式
-
r
# 以只读方式打开文件(默认),文件的指针会放在文件的开头 # 若文件不存在,会报错 f = open("a.txt", "r") # 在同级目录下打开文件 content = f.read() print(content)
-
w
# 以只写方式打开文件,文件的指针也在文件开头,进行覆盖写入(先清空后写入) # 若文件不存在,会创建一个新的文件 f = open("a.txt", "w") f.write("66666")
-
a
# 与 w唯一不同的是,文件的指针会放在文件的末尾 # 追加写入
-
增加b操作
# 以二进制的方式进行文件操作 rb, wb, ab # 将一张图片的一半内容写入到另外一个图片中 # 第二章图片可以打开浏览,只有第一张一半的内容,也可能是图片质量下降(我测试的是这种情况) fromFile = open("pic.jpg", "rb") content = fromFile.read() fromFile.close() writeLen = len(conten) // 2 toFile = open("pic2.jpg", "wb") toFile.write(content[0:writeLen]) toFile.close()
文件指针的定位
f = open("a.txt", "r") # 当前文件内容:12345678
print(f.tell()) # 获得当前文件指针的位置 0
f.seek(2) # 向后移动两个单位
print(f.tell()) # 2
print(f.read()) # 345678
print(f.tell()) # 8
# seek(offset, whence=0)
# whence表示指定文件指针所在的位置
# whence=0:文件开始处,offset >= 0
# whence=1:当前的位置,offset is free
# whence=2:文件结尾处,offset <= 0
# 但是对于不带 b的文件操作,whence只能为 0
文件读操作
-
f.read(length):
# length默认是文件所有内容的长度,文件指针自动向后移动 f = open("a.txt", "r") # 文件内容:12345 content = f.read(2) print(content) # 12 print(f.tell()) # 4
-
readline(limit):
# 读取一行数据,会读入文件中的换行符 # limit:限制的最大字符数 f = open("a.txt", "r") # 文件内容:123\n456\n # 读出的换行符是有换行作用的 print(f.readline(2)) # 12(有换行,print函数加上的) print(f.readline(), end='') # 3(有换行, 文本自带的) print(f.readline(), end='') # 456(有换行, 文本自带的)
-
readlines():
# 按照换行符对文件内容进行处理,处理好的每一行组成一个列表返回 f = open("a.txt", "r") # 文件内容:123\n456\n printf(f.readlines()) # ['123\n', '456\n']
遍历
# 直接遍历文件
f = open("a.txt", "r")
for i in f:
print(i, end='')
# 遍历 readlines()的结果
lines = f.readlines()
for line in f:
print(line, end='')
文件关闭
- 释放系统资源
- 将内存缓冲区中的内容同步到磁盘中
- 文件写入内容时,并不是立即写入到磁盘文件,而是在对应的内存缓冲区做修改,当文件关闭时,再一次性将这些修改拷贝到磁盘。
- f.flush() 可以强制刷新内容到磁盘。
其他操作
- 依赖于os模块
- 重命名
import os os.rename("b.txt", "a.txt") # 更改文件名称 os.rename("dir1", "dir2") # 更改目录名称
- 删除
import os os.remove("b.txt") # 删除 b.txt os.rmdir("dir1/dir2") # 删除了 dir2目录,若目录不为空,则无法删除 os.rmdirs("dir1/dir2") # 递归删除,若dir1为空,也删除
- 创建目录
import os # mkdir(path, mode) # mode=0o777 //权限设定方式参照 Linux os.mkdir("dir1") # 一次只能创建一个目录,不能递归创建多个目录
- 路径相关操作
# os.getcwd() 获得当前的目录 # os.chdir() 改变当前所在路径 # os.listdir() 获得目录下文件列表
文件相关案例
- 文件复制
import os
# 只读模式,打开要复制的文件
# 追加模式,打开副本文件
scr_file = open("d.txt", "r", encoding="utf-8")
obj_file = open("d_copy.txt", "w", encoding="utf-8")
# 从源文件中读取内容,写入到目标文件
while True:
content = scr_file.read(1024) # 如果文件过大,分块写入
if not content:
break
else:
obj_file.write(content)
# 关闭源文件和目标文件
scr_file.close()
obj_file.close()
- 文件分类,生成文件清单
import os
file_list = os.listdir(".")
res = {}
for file in file_list:
if "." not in file: # 排除掉目录
continue
appendix = file.split(".")[-1] # 获得扩展名
if appendix not in res:
res[appendix] = []
res[appendix].append(file)
print(res)
网友评论