• Python文件IO操作


    十五,pytho文件IO操作

    python文件操作的步骤

    1,先open打开一个要操作的文件

    2,操作此文件(读,写,追加)

    3,close关闭此文件

    python主要访问模式

    只读模式(r)  

    创建一个测试用文件

    cat /etc/passwd |head -5>/tmp/1.txt 
    

      只读模式示例

    # 只读模式示例
    f = open("/tmp/1.txt", mode="r")        # 默认为读模式
    data1 = f.read()        # 读第一遍
    data2 = f.read()        # 读第二遍
    print(data1)    # 打印读取第一遍的输出即文件所有内容
    print("="*50)   
    print(data2)    # 第二次读取没有内容
    f.seek(10)      # 移动光标指针位置至位置10 一个字符占用一个位置
    print(f.tell()) # 打印指针位置
    print(f.readline())
    data2 = f.read()
    print(data2)
    f.close()
    

      小结

      r模式是打开文件,默认光标在第1位,即seek(0)

      read()读取当前光标至文件最后

      readline()读取当前光标至当前行最后

      readlines()类似read(),但是读取的内容按行转换成列表,列表元素包含换行符

      只写模式示例

    [root@node1 python]# cat 只写模式.py 
    f = open("/tmp/1.txt","w") # 只写模式,文件不存在则创建文件,如果文件存在则会覆盖原内容
    # data=f.read()	# 读取会报错
    f.close()
    
    f = open("/tmp/2.txt","w")
    
    f.write("hello
    ")
    f.write("world
    ")
    

      只写模式示例 创建新文件并写入内容

      下面打开一个终端操作

    >>>f=open("/tmp/2.txt","w")    # 如果有文件则清空文件内容,如果文件不存在则创建文件
    >>> f.write("hello
    ")    # 往文件写入内容加回车,默认不加回车
    6        # 返回写了多少给字符,这时候文件内容还是为空除非是flush或者close
    >>>
    >>>f.truncate()# 截断,括号里没有数字,那么就是不删除
    >>>f.truncate(3)# 截断,数字为3,就是保留前3个字节
    >>>f.truncate(0)# 截断,数字为0,就是全删除
    >>>f.flush()    #刷新把内存睡觉写入到硬盘
    >>>f.close()    #关闭
    

      追加模式

    >>>f=open("/tmp/2.txt",'a')# 类似shell里的>>符
    >>>f.write("hello
    ")  # 在文件尾部追加
    >>>f.flush()
    >>>f.truncate(0)    # 追加模式可以是否truncate方法清空文件
    >>>f.close()
    

      注意

    扩展:1,但python里的a模式,是可以使用truncate方法来清空内容的
    2,在linux系统里执行了下面命令后,则就只能追加此文件,而不能清空此文件内容# chattr +a /tmp/2.txt
    3,如果在linux系统里做了chattr+a/tmp/2.txt后,在python里再用w或a模式open此文件,就不可以使用truncate方法来清空内容了(因为python允许你这么做,但linux系统拒绝了)
    

      文件读的循环方法

    f = open("/tmp/1.txt", "r")
    # 循环方法一
    for index, line in enumerate(f.readlines()):
        print(index, line.strip())
    f.close()
    
    # 循环方法二:执行效率高,相当于一行一行的读,而不是一次性读取完
    # 如果文件太大使用方法一循环速度会很慢
    f = open("/tmp/1.txt", "r")
    for index, line in enumerate(f):
        print(index, line.strip())
    f.close()
    ~                    
    

      比较r+,w+,a+三种模式

    r+不会改变原文件的数据,相当于在只读模式的基础上加了写权限;
    w+会清空原文件的数据,相当于在只写模式的基础上加了读权限;
    a+不会改变原文件的数据,相当于在只追加模式的基础上加了读权限
    

      示例

    f = open("/tmp/2.txt", "w+")
    f.write("11111
    ")
    f.write("22222
    ")
    f.write("33333
    ")
    print(f.tell()) # 打印结果为18,表示光标在最后
    f.write("aaa") # 在文件后追加aaa字符
    print(f.tell())
    
    f.seek(0)       # 把光标移动到0也就是第一个字符
    f.write("bbb")  # f.seek(0)之后再写bbb,就是把第一行的前3个字符替换成bbb 第一行变成了bbb11
    
    f.seek(0)       # 把光标再次移动到0
    f.readline()    # 读取一行,读光标移动到第一行最后
    f.seek((f.tell())) # f.seek到第一行最后 如果理解为两个光标的话,可以看作是把写光标同步到读光标位
    f.write("ccc")  # 这样写ccc,会把第二行的前3个字符替换成ccc
    
    f.close()
    

      

  • 相关阅读:
    利用读写锁实现缓存系统
    POJ 1338 Ugly Numbers
    copy算法
    它们的定义iOS双击Home截图按键开关
    以正能量的点!!!
    该公路项目
    ArcSDE当关系查询ArcMap与REST查询结果不一致问题的解决
    【OpenCV新手教程第14】OpenCVHough变换:霍夫变换线,霍夫变换圆汇编
    为了树莓派IIraspberrypi安装emacs+ecb+cedet+session+color-theme+cscope+linum
    事件总线帧---Otto
  • 原文地址:https://www.cnblogs.com/minseo/p/13894751.html
Copyright © 2020-2023  润新知