zoukankan      html  css  js  c++  java
  • python文件操作

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

    一、文件处理模式

    • 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("
    白百何  北京  167  55  13523230322".encode("gbk"))   # 换行追加
    f.close()
    •  循环文件
    f = open("兼职白领学生空姐模特护士联系方式.txt",'r',encoding="utf-8")
    
    for line in f:
        print(line)
    
    f.close()

    二、混合模式

      "+" 表示可以同时读写某个文件

    •  r+,可读写文件。【可读;可写;可追加】
    f = open('兼职联系信息.txt','r+',encoding="gbk")
    data = f.read()
    print("content",data)
    
    f.write("
    newline 1老师")
    f.write("
    newline 2老师")
    f.write("
    newline 3老师")
    f.write("
    newline 4老师")
    
    print("new content", f.read())
    # read不到结果,因为写入后光标已经移到末尾
    
    f.close()
    •  w+,写读
    # 写读是以创建的模式打开(将原来的东西覆盖),可以读取写入的内容
    f = open("兼职联系信息.txt",'w+',encoding="gbk")
    data = f.read()
    print("content", data)
    
    f.write("
    newline 1学生")
    f.write("
    newline 2学生")
    f.write("
    newline 3学生")
    f.write("
    newline 4学生")
    
    print("new content",f.read())
    
    f.close()
    • a+,同a

    "U"表示在读取时,可以将 自动转换成 (与 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("
    白百何  北京  167  55  13523230322".encode("gbk"))   # 换行追加
    f.close()

    四、文件智能检查(chardet)

      可解决不清楚要处理文件是什么编码的问题

    import chardet   # chardet需要用pip安装第三方工具包(pip3 install chardet)
    
    f = open('兼职联系信息.txt',mode='rb')
    data = f.read()
    f.close()
    result = chardet.detect(data)  # 检查文件编码格式
    print(result)  # 输出如下结果
    """
    {'encoding': 'utf-8', 'confidence': 0.87625, 'language': ''}
    """
    data.decode("utf-8")   # 解码
    
    # 修改编码后查看文件信息
    f = open('兼职联系信息.txt',mode='r',encoding='utf-8')
    data = f.read()
    print(data)

    五、文件操作其他功能

    f = open("兼职.txt",mode="r+",encoding="gbk")
    
    f.fileno() # 返回文件句柄在内核中的索引值,做IO多路复用可以用到
    
    f.flush()  # 把文件从内存buffer里强制刷新到硬盘
    
    f.readable()  # 判断是否可读
    
    f.readline()  # 只读一行,遇到
      
     为止
    
    f.seek()      # 把操作文件的光标移到指定位置(按字节)
    f.seek(0)     # 光标移动到文首
    
    f.seekable()  # 判断文件是否可进行seek操作
    
    f.tell()      # 返回当前文件操作光标位置(按字节)
    
    f.truncate()  # 按指定长度截断文件(需要写权限),从光标当前位置开始往后截断
    f.truncate(6) # 加上数字是从头开始截取6位字节
    
    f.writable()  # 判断文件是否可写
    
    f.read()      # 按字符,注意和tell和seek的区别

    六、文件修改

    1、在指定位置修改文件

    # 修改文件时,先移动光标到指定位置,向文件写入内容
    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("
    ")
    
    f.seek(42)
    f.write("
    ")
    
    f.seek(62)
    f.write("
    ")
    
    f.seek(0)
    f.read()
    
    f.close()

    2、文件修改时占有硬盘,减少内存使用

    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)    # 新文件替代旧文件
  • 相关阅读:
    2012 金华 现场赛
    依据错误原理解决Hibernate执行出现No CurrentSessionContext configured!错误
    【python】a[::-1]翻转
    【算法】各种哈希算法
    【wireshark】打开后显示There are no interfaces on which a capture can be done
    【python】在python中调用mysql
    【mysql】执行mysql脚本
    【mysql】用navicat连接虚拟机mysql出现错误代码(10038)
    【python-mysql】在ubuntu下安装python-mysql环境
    【python】lamda表达式,map
  • 原文地址:https://www.cnblogs.com/xiugeng/p/8449710.html
Copyright © 2011-2022 走看看