码迷,mamicode.com
首页 > 编程语言 > 详细

python学习05-文件操作

时间:2018-02-15 19:14:18      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:打开   进制   io多路复用   清空   强制   div   覆盖   存在   编码   

  文件操作分为读、写、修改,以什么模式存文件,就以什么模式编码打开文件。

打开文件的模式有:

  • 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)    # 新文件替代旧文件

 

python学习05-文件操作

标签:打开   进制   io多路复用   清空   强制   div   覆盖   存在   编码   

原文地址:https://www.cnblogs.com/xiugeng/p/8449710.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!