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

    文件常用IO操作——open

    # r模式
    f = open("test","r")  #只读
    f.read()
    f.write("abc")
    f.close()
    
    # w模式
    f = open("test","w")  #只写打开
    f.write("abc")
    f.close()
    • r模式
    1. 只读打开文件,若使用write方式,会抛异常
    2. 如果文件不存在,抛出异常
    • w模式
    1. 只写方式打开,如果读取则抛异常
    2. 若文件不存在,则直接创建文件
    3. 如果文件存在,清空文件内容并写入
    # x模式
    f = open("test","x")  #只写打开
    f.read()
    f.write("abc")
    f.close()
    
    # a模式
    f = open("test","x")  #只写打开
    f.read()
    f.write("abc")
    f.close()
    • x模式
    1. 文件不存在,则直接创建文件,并只写方式打开
    2. 文件存在,则抛异常
    • a模式
    1. 文件存在,只写打开,追加内容
    2. 文件不存在,则创建后,只写打开,追加内容
    • r是只读,wxa都是只写
    • wxa模式都可产生新文件

    文件指针

    • mode = r 指针起始在0位置
    • mode = a 指针起始在EOF文件末尾位置
    • tell() 显示指针当前位置
    • seek(offset[,whence]) 移动文件指针,是按照字节偏移

    seek

    • seek(offset[,whence]) 移动文件指针。是按照字节偏移
    • offset 偏移的字节数。可以为正和负数。
    • 偏移后可以超过文件末尾EOF,超过部分用字节O表示。
    • 不能超过文件开始。如果超过会报错

    tell

    可以显示当前文件指针位置,注意指针位置是按照字节计算的。

    fil = open("test","a+") #打开文件
    fil.write("abcd你好")
    fil.seek(0) #指针回到起始位置
    fil.seek(2,0) #指针相对于开始位置向左移动2个位置
    print(fil.tell()) #查看当前指针位置
    fil.close() #关闭文件流
    • lush() 将缓冲区数据写入到磁盘
    • close() 关闭文件流。关闭前会调用flush()。文件已经关闭,再次关闭没有任何效果
    • seekable() #是否可以seek
    • readable() #是否可读
    • writable() #是否可写
    • closed #是否已经关闭

    buffering缓冲区

    • -1 表示使用缺省大小的buffer。
    • 0 只在二进制模式使用,表示关闭buffer
    • 1 只在文本模式使用,表示使用行缓冲,意思就是见到换行符flush
    • 大于1 使用指定buffer的大小

    buffer缓冲区:缓冲区是一个内存空间,一般来说是一个FIFO队列,到缓冲区满了或者达到阀值,数据才会flush到磁盘。flush()将缓冲区数据写入到磁盘,close()关闭文件流,关闭前会调用flush()

    总结规律:

    1.   文本模式,一般都用默认缓冲区大小
    2. 二进制模式,是一个个字节的操作,可以指定buffer的大小
    3. 一般来说,默认缓冲区大小是比较好的选择,除非明确知道,否则不调控它
    4. 一般编程中,明确知道需要写磁盘了,都会手动调用一次flush,而不是等到自动调用flush或者close的时候。

    encoding编码

    • encoding 编码,仅文本模式使用。如果是b字节模式,无用
    • 默认值为None表示使用缺省编码,依赖操作系统。即 为默认值None是,使用文本模式打开文件时,默认使用的编码为系统默认编码。windows下缺省值为GBK(0xBOA1),Linux下缺省值为:UTF-8

    上下文管理

    • 一般情况,系统对打开文件上限做了限制,linux中可以使用ulimit -a 查看所有限制。其中open file就是打开文件数的现在,默认是1024。如果打开文件达到上线,程序在次打开文件就会出错。出现OSError异常。为了防止打开文件后没有关闭文件,一般都需要添加异常处理。当发生异常是。关闭文件。
    f = None
    try:
        f = open('test')
        f.write("abc") # 文件是用只读模式打开,写入失败。
        f.close()
    finally:
        if f!=None:
            f.close() #当发生异常,如果f不为空,关闭文件流。释放文件对象

    上下文管理:一种特殊的语法,交给解释器去释放文件对象

    • 使用with…as 关键字
    • 上下文管理的语句块并不会开启新的作用域
    • with语句块执行完的时候,会自动关闭文件对象
    • 第一种写法示例
    del f
    #使用with...as 语法,当代码块中出现异常时,会自动关闭f
    with open("test") as f:
        f.write("abc") #因为是只读模式打开,所有会出错。写入失败
    #测试f发现f已经关闭
    f.closed 
    • 第二种写法:
    f = open("test")
    with f:
        f.write("abcd") #因为是只读模式打开,所有会出错。写入失败
    #测试f,f已经关闭
    f.closed
    • 对于类似于文件对象的IO对象,一般来说都需要在不使用的时候关闭,注销,已释放资源。IO被打开的时候,会获得一个文件描述符。计算机资源是有线的,所以操作系统都会做限制。就是为了保护计算机的资源不要被完全耗尽,计算资源是共享的,不是独占的。
    • 一般情况下,除非特别明确的知道资源情况,否则不要提高资源的限制值来解决问题。
  • 相关阅读:
    HDU 5938 Four Operations 【贪心】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5935 Car 【模拟】 (2016年中国大学生程序设计竞赛(杭州))
    HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5933 ArcSoft's Office Rearrangement 【模拟】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5929 Basic Data Structure 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
    【转】LaTeX 符号命令大全
    HDU 5922 Minimum’s Revenge 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
    HDU 5927 Auxiliary Set 【DFS+树】(2016CCPC东北地区大学生程序设计竞赛)
    数据结构之稀疏矩阵
    C++中引用(&)的用法和应用实例
  • 原文地址:https://www.cnblogs.com/fjjj/p/12823917.html
Copyright © 2011-2022 走看看