文件操作分为读写修改, 以什么模式存文件, 就以什么模式编码打开文件
打开文件的模式有:
r, 只读模式 (默认)
- #以什么模式存文件,
- 就以什么模式编码打开文件#示例一: r是文本只读模式
f = open(file=D:/ 工作 / 兼职联系信息. txt,mode=r,encoding=utf-8) # 绝对路径访问
- data = f.read()
- f.close()
- # 示例二: rb: 二进制只读模式, 无法指定 encoding, 因为在该模式下数据读到内存里直接是 bytes 格式, 如要查看内容还需手动 decode
f = open(file = 兼职联系信息. txt, mode=rb)
w, 只写模式不可读; 不存在则创建; 存在则删除内容;
# w 模式是创建新文件, 如果文件存在则清空重写
f = open(file = 兼职. txt,mode=w,encoding=gbk)
f.write(美女按摩服务, 电话号: adfs123)
f.close()
a, 追加模式可读; 不存在则创建; 存在则只追加内容;
# a 是追加模式
f = open(兼职联系信息. txt, ab)
- f.write("\n 白百何 北京 167 55 13523230322".encode("gbk")) # 换行追加
- f.close()
"+" 表示可以同时读写某个文件
r+, 可读写文件可读; 可写; 可追加
f = open(兼职联系信息. txt,r+,encoding="gbk")
- data = f.read()
- print("content",data)
- f.write("\nnewline 1 老师")
- f.write("\nnewline 2 老师")
- f.write("\nnewline 3 老师")
- f.write("\nnewline 4 老师")
- print("new content", f.read())
- # read 不到结果, 因为写入后光标已经移到末尾
- f.close()
w+, 写读
- # 写读是以创建的模式打开 (将原来的东西覆盖), 可以读取写入的内容
- f = open("兼职联系信息. txt",w+,encoding="gbk")
- data = f.read()
- print("content", data)
- f.write("\nnewline 1 学生")
- f.write("\nnewline 2 学生")
- f.write("\nnewline 3 学生")
- f.write("\nnewline 4 学生")
- print("new content",f.read())
- f.close()
a+, 同 a
"U" 表示在读取时, 可以将 \r \n \r\n 自动转换成 \n (与 r 或 r+ 模式同使用)
rU
r+U
"b" 表示处理二进制文件 (如: FTP 发送上传 ISO 镜像文件, linux 可忽略, windows 处理二进制文件时需标注)
- rb
- #rb: 二进制只读模式, 无法指定 encoding,
因为在该模式下数据读到内存里直接是 bytes 格式, 如要查看内容还需手动 decode f = open(file = 兼职联系信息. txt, mode = rb)
wb
f = open(兼职 2.txt,wb) # 写二进制
- f.write("美女陪聊!".encode("gbk"))
- f.close()
- ab
f = open(兼职联系信息. txt, ab)
- f.write("\n 白百何 北京 167 55 13523230322".encode("gbk")) # 换行追加
- f.close()
文件操作
- f = open("兼职. txt",mode="r+",encoding="gbk")
- f.fileno() # 返回文件句柄在内核中的索引值, 做 IO 多路复用可以用到
- f.flush() # 把文件从内存 buffer 里强制刷新到硬盘
- f.readable() # 判断是否可读
- f.readline() # 只读一行, 遇到 \ r \n 为止
- f.seek() # 把操作文件的光标移到指定位置 (按字节)
- f.seek(0) # 光标移动到文首
- f.seekable() # 判断文件是否可进行 seek 操作
- f.tell() # 返回当前文件操作光标位置 (按字节)
- f.truncate() # 按指定长度截断文件 (需要写权限), 从光标当前位置开始往后截断
- f.truncate(6) # 加上数字是从头开始截取 6 位字节
- f.writable() # 判断文件是否可写
- f.read() # 按字符, 注意和 tell 和 seek 的区别
文件修改
# 修改文件时, 先移动光标到指定位置, 向文件写入内容
f = open(file = 兼职模特联系方式. txt,mode=a,encoding=gbk)
- f.write("安琪 170 50 13988888")
- f.write("白雪 167 48 13324434")
- f.write("刘琳 166 46 13828382")
- f.seek(22) # 移动光标到指定位置插入文件
- f.write("\n")
- f.seek(42)
- f.write("\n")
- f.seek(62)
- f.write("\n")
- f.seek(0)
- f.read()
- f.close()
文件修改时占有硬盘, 减少内存使用
- mport os
- f_name = "兼职模特联系方式. txt"
- f_new_name = "%s.new" %f_name
- old_str = "白雪"
- new_str = "白百合"
- f = open(f_name,mode=r,encoding=utf-8)
- f_new = open(f_new_name,w,encoding=utf-8)
- for line in f:
- if old_str in line:
- line = line.replace(old_str,new_str)
- f_new.write(line)
- f.close()
- f_new.close()
- os.rename(f_new_name,f_name) # 新文件替代旧文件
来源: http://www.bubuko.com/infodetail-2499086.html