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

    1 文件操作流程

    1 打开文件

    对操作系统发起系统调用
    要操作文件,需要获得文件的句柄。可以通过open()来获取文件的句柄。

    f=open("file_path",mode="r",encoding="utf-8") 
    

    f就是文件的句柄
    对文件的操作,也就是对句柄的操作。
    encoding默认的是以系统默认的编码方式。(windows默认gbk,mac和linux默认utf-8)


    ## 2 操作文件

    包括对文件的读和写。下面具体介绍

    3 关闭文件

    f.close()
    

    python提供了另一个方法来避免忘记写close()的方法。

    with open("file_path",mode="r",encoding="utf-8") as f
    

    通过控制块的范围,当代码运行超出范围时,自动执行close()。推荐使用with as。
    注意:文件内容在内存中,什么时候会写入磁盘?只有强制使用flush()刷新,手动调用close()或程序结束,内容会一次性从内存写入文件。


    2 文件的操作具体内容

    每一次使用open(),光标都会被重置到文件开头位置。

    文件的操作,可以是对字符的操作和字节的操作。

    1 文件的权限控制

    r    字符可读,文件不存在报错
    w    字符可写,文件不存在,创建
    a    字符追加(append),文件不存在,创建
    r+   字符可读可写(读的时候,从光标(光标默认在开始)位置开始读,写的时候是从光标所在位置开始写) 文件不存在报错
    w+   字符可读可写(读是光标位置开始读(可通过seek调节位置),写的时候都是覆盖写)  文件不存在,创建
    a+   字符可读可写(光标默认在最后,必定在最后追加写) 文件不存在,创建
    rb   二进制可读
    wb   二进制可写
    ab   二进制追加
    rb+  二进制可读可写
    wb+  二进制可读可写
    ab+  二进制可读可写
    

    r+、w+、a+和rb+、wb+、ab+除了一个是处理字符,一个处理字节,其他特性都一样。这里我们只研究前3个处理字符的。

    fd = open("111.txt",'w+')
    

    w+模式是只要运行上面这条指令,如果111.txt,不存在就创建。如果存在,且里面有内容,则会直接执行清空。之后再执行读写操作。读是光标位置开始读(可通过seek调节位置),且只能在同一个文件句柄中读取出写入的内容(如下面这种,flush与否都能read出来“234”),写的时候都是覆盖写。

    fd = open("111.txt",'r+')
    fd.write("234")
    #fd.flush()
    fd.seek(0)
    print(fd.read())
    

    r+如果文件不存在,就直接报错。读的时候,从光标位置开始读(光标默认在开头),写的时候是从光标所在位置开始写(默认在结尾,追加写)。

    fd = open("111.txt",'a+')
    #fd.seek(0)
    print(fd.read())
    

    a+文件不存在,创建。读的时候从光标位置开始读(光标默认在末尾),写的时候必定在最后追加写。

    2 字符的操作

    1. 文件的读
    f.read()   #一次性将文件的全部内容读入系统(文件过大,可能会报错)
    f.read(5)   #一次读5个字符(节)
    f.readable()  #判断可读权限
    f.readline()   #返回一行,后面有
    ,光标移动到下一行行首
    f.readlines()   #以列表的形式返回文件的所有行内容(不推荐使用)
    for line in f  #f是迭代器,每次只返回一条结果,不会因文件过大,而出现内存错误,优于readlines()
    
    1. 文件的写
    f.write("abc") #把“abc”写到文件,并返回相应的字符(节)个数
    f.writelines([list])  #一次写多行
    f.truncate(3)   #从光标位置开始向后截取3个字符
    f.writable()  #判断可写权限
    f.flush()    #强制把内存里的内容写入磁盘
    一但文件写入磁盘,就不可能再向文件插入内容
    
    1. 重点:
      光标的移动:
    f.seek(0) #把光标移动到开头(按字节)
    f.tell()  #返回当前光标的位置
    f.seek(3,0)  #0表示光标从开头位置开始
    f.seek(3,1)  #1表示光标从当前位置开始向后移动3个字节
    f.seek(-3,2)  #2表示光标从结尾开始,-3表示向前移动3个字节。此处若为3,是说光标继续向后移动3个字节,会报错。
    

    3 字节的操作

    with open("111.txt","rb+") as f:
        f.write("hello李".encode("utf-8"))
    
  • 相关阅读:
    02基础软件安装
    01系统软件安装
    dmesg命令
    perl 远程连接oracle
    延时取消订单还在用定时任务?来看mq的实现
    微信公众号开发Java版-学习总结
    (转)SQL Server 2008 允许远程连接的解决方法
    java生成pdf并加水印,通过wkhtmltopdf实现
    boostrap-table表格插件笔记
    art-template笔记
  • 原文地址:https://www.cnblogs.com/yangzhenwei123/p/6758899.html
Copyright © 2011-2022 走看看