美文网首页程序员
浅谈python open()函数

浅谈python open()函数

作者: 君子月满楼 | 来源:发表于2017-03-30 16:49 被阅读332次

    1. 参数说明

    open(filename,m)
    filename:文件名
    m:读写属性,有r、w、b、a、+等参数
    r:读取模式打开文件
    w:读写模式打开文件
    a:写入模式打开文件
    b:二进制模式打开文件(可以和其他模式并用)
    +:读/写模式(可以和其他模式并用)
    U:支持换行符(例如:\n、\r 或 \n\r 等)

    2.关闭文件

    首先,python中open文件后,会自动关闭文件,所以不显式主动关闭也是可以接受的。
    第二,python自动关闭文件的时间是不确定的,所以主动关闭文件更好。
    第三,最好的处理文件方式是使用上下文管理器with打开文件,这样可以确定文件关闭时间。
    第四,使用f.close()显示关闭文件时,只是不能读写文件,但文件对象仍然存在。

    3. 写文件注意事项

    1)当open文件属性为仅w时,表示为复写文件。所谓复写文件,就是先清除原来数据,再写入新数据。敲黑板,重点来了:清除原来数据发生在使用open()函数时,而不是使用write()函数的时候。

    所以:以下过程文件数据没有被清除:

    >>> b = open('test_file.txt')
    >>> c = open('test_file.txt')
    >>> d  = open('test_file.txt','r')
    

    而以下过程文件数据被清除:

    >>> b = open('test_file.txt')
    >>> c = open('test_file.txt','w')
    

    笔者之前要实现读取json文件,并改写某一个key的value,写过这样一段代码:

    def set_config(key,value):
        file = 'abc.conf'
        f1 = open(file)
        f2 = open(file,'w')
        confdict = json.load(f1)
        confdict.get((key,'')
        json.dump(confdict,f2)
        f1.close()
        f2.close()
    

    结果是程序一直报错,无法load文件内容。原因就在于在f2 = open(file,'w')这行代码中清除了数据,导致f1文件对象所指文件没有数据。

    2)当open文件属性为r+w时,表示覆写,即写入数据时覆盖文件。该模式使用open()函数时并没有清除数据,使用write()或者json.load()方法时会从文件某个地方开始写,如果文件此处原来有数据,则覆盖,若没数据则追加。
    举个例子:
    file内容:'test'
    运行一下代码:

    >>> a = open('test_file.txt','r+w')
    >>> a.write('hello')
    >>> a.flush()
    

    则file内容变为:hello'
    接着运行以下代码:

    >>> a.write('a')
    >>> a.flush()
    

    则file内容变为:helloa

    3)当open文件属性为a时,表示追写文件。
    file原内容:'test'
    运行一下代码:

    >>> a = open('test_file.txt','a')
    >>> a.write('hello')
    >>> a.flush()
    

    则file内容变为:'test'hello
    接着运行以下代码:

    >>> a.write('a')
    >>> a.flush()
    

    则file内容变为:'test'helloa

    相关文章

      网友评论

        本文标题:浅谈python open()函数

        本文链接:https://www.haomeiwen.com/subject/merpottx.html