zoukankan      html  css  js  c++  java
  • Python

    • 读写模式:

    r:只读模式(如果没指定模式,默认为只读模式)

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='r')  # 文件句柄
    fr = f.read()
    print(fr)
    
    f.close()  # 关闭文件
    

    运行结果

    如果对同一个文件句柄连续进行 read() 操作的话,只有第一个 read() 操作有内容,其余的都是空白的

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='r')  # 文件句柄
    
    fr = f.read()
    fr1 = f.read()
    fr2 = f.read()
    
    print(fr)
    print("---------")
    print(fr1)
    print("+++++++++")
    print("---------")
    print(fr2)
    print("+++++++++")
    
    f.close()  # 关闭文件
    

    运行结果

    因为 read() 操作是连续的

    readline() 进行一行一行地读取

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='r')  # 文件句柄
    print(f.readline())
    print(f.readline())
    print(f.readline())
    print(f.readline())
    print(f.readline())
    f.close()  # 关闭文件
    

    运行结果

    因为每一行末尾都有一个换行符 ,打印的时候 也打印了,所以空了一行

    readlines() 以行为单位读取文件内容

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='r')  # 文件句柄
    fr = f.readlines()
    print(fr)
    
    f.close()  # 关闭文件
    

    运行结果

    结果是列表,每行字符串为该列表的元素,每行末尾有个换行符

    打印每行的内容

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='r')  # 文件句柄
    
    for line in f.readlines():
        print(line.strip())  # strip() 去掉换行符
    
    f.close()  # 关闭文件
    

    运行结果

    readlines() 遇到大文件时比较占内存,因为 readlines() 直接将整个文件读入内存,推荐用下面的方法

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='r')  # 文件句柄
    
    for line in f:
        print(line.strip())  # strip() 去掉换行符
    
    f.close()  # 关闭文件
    

    这个方法是一行一行地读

    readable() 判断文件是否可读

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='r')  # 文件句柄
    
    fr = f.readable()
    print(fr)
    
    f.close()  # 关闭文件
    

    运行结果

    w:只写模式,文件不存在则创建,文件存在则覆盖原文件

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_w', mode='w')
    
    f.write('悯农
    ')
    f.write('李绅
    ')
    f.write('春种一粒粟,秋收万颗子。
    ')
    f.write('四海无闲田,农夫犹饿死。')
    
    f.close()
    

    运行,创建了一个文件“file_w”(本地没有该文件)

    如果文件存在的话

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_w', mode='w')
    
    f.write('test')
    
    f.close()
    

    运行结果

    之前的内容被新的内容覆盖了

    还有一个 writelines() 方法,可以写入一个序列

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_w', mode='w')
    
    f.writelines(["春种一粒粟,", "秋收万颗子。
    "])
    f.writelines(("四海无闲田,", "农夫犹饿死。
    "))
    f.writelines({"锄禾日当午,", "汗滴禾下土。
    "})
    f.writelines("谁知盘中餐,粒粒皆辛苦。")
    
    f.close()
    

    运行结果

    用逗号隔开的各个元素进行拼接

    用 writeable() 判断文件是否可写

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_w', mode='w')
    
    print(f.writable())
    
    f.close()
    

    运行结果

    a:追加模式,只能写不能读,不会创建新文件,不会覆盖原文件,在原文件后追加内容

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file="file_w", mode='a')
    
    f.write('
    This is a test')
    
    f.close()
    

    运行结果

    追加模式写的方法和只读模式用的方法一样,只不过追加模式是在原文件末尾添加内容

    rb:只读二进制模式

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='rb')
    
    fr = f.read()
    print(fr)
    
    f.close()
    

    运行结果

    wb:只写二进制模式

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_w', mode='wb')
    
    f.write('春种一粒粟,秋收万颗子。
    '.encode())
    f.write(b'This is a test')
    
    f.close()
    

    运行结果

    rb、wb、ab 都可以用来读写图片文件、音频文件等

    ab:追加二进制模式

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file="file_w", mode='ab')
    
    f.write('
    This is from append1
    '.encode())
    f.write(b'This is from append2')
    
    f.close()
    

    运行结果

    r+:读写模式,既可读,也可以写(读模式支持写)

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='r+')
    
    fr = f.read()
    print(fr)
    f.write('From Writing')
    fr1 = f.read()
    print(fr1)
    
    f.close()
    

    运行结果

    写入的内容

    后来写进去的那句话并没有被读出来

    w+:写读模式,既可写,也可以读(写模式支持读)

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_w', mode='w+')
    
    print(f.read())
    f.write('四海无闲田,')
    f.write('农夫犹饿死。')
    print(f.read())
    
    f.close()
    

    运行结果

    读出的内容是空的

    写入的内容

    原来的内容被覆盖了

    a+:可读追加模式

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file="file_w", mode='a+')
    
    print(f.read())
    f.write('
    This is from append1
    ')
    f.write('This is from append2')
    print(f.read())
    
    f.close()
    

    运行结果

    写入的内容

    • 其他操作:

    判断文件是否已经关闭

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='r')
    
    print(f.closed)  # 判断文件是否已经关闭
    
    f.close()
    
    print(f.closed)
    

    运行结果

    查看文件名

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='r')
    
    print(f.name)  # 查看文件名
    
    f.close()
    

    运行结果

    查看光标的位置

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='r')
    
    print(f.readline())
    print(f.tell())  #  查看光标所在位置
    
    f.close()
    

    运行结果

    光标所在位置为字符数,包括空格,包括换行符等符号,换行符占两个字符

    移动光标所在的位置

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='r')
    
    print(f.readline())
    print(f.readline())
    print(f.tell())  #  查看光标所在位置
    f.seek(17)  # 把光标设置在 17 的位置
    print(f.tell())  #  查看光标所在位置
    print(f.readline())
    
    f.close()
    

    运行结果

    最后一个 print(f.readline()) 打印的是光标新位置所在行之后的内容,也就是 web

    判断光标的位置是否可移动

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='r')
    
    print(f.readline())
    
    print(f.seekable())  # 判断光标的位置是否可移动
    
    f.close()
    

    运行结果

    对文件读写的刷新

    文件读写有个缓存的机制,读写的时候不会一个字符或者一行地写入文件,而是先保存在缓冲区,待到缓冲区满的时候再统一写入文件

    这样有可能会导致发生意外情况时的数据丢失

    用 write() 向 file_w 文件中写入内容,查看的时候却没有,这时候需要用到 flush()

    直接写入了

    对文件进行截断

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='a')
    
    f.truncate(18)  # 对文件进行截断前 18 个字符
    
    f.close()
    

    运行结果

    截断到第 18 个字符

    判断是否为终端设备

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    f = open(file='file_test', mode='a')
    
    print(f.isatty())
    
    f.close()
    

    运行结果

    查看文件编码

    >>> f = open(file="file_test", mode="r")
    >>> f.encoding  # 查看文件编码
    'UTF-8'
    

    查看文件读写模式

    >>> f = open(file="file_test", mode="r")
    >>> f.mode  # 查看文件读写模式
    'r'
    

    查看文件句柄的编号

    >>> f = open(file="file_test", mode="r")
    >>> f.fileno()  # 文件句柄的编号
    4
    
  • 相关阅读:
    C语言文法分析
    词法分析--编程感想
    词法分析(改)
    0916词法分析
    0909关于编译
    python正则表达式
    python除法运算
    python值相等和对象相同
    Java编写程序时要考虑到所有可能的异常
    hadoop 读取文件操作
  • 原文地址:https://www.cnblogs.com/sch01ar/p/9415134.html
Copyright © 2011-2022 走看看