python 基础 day3

发布时间:2019-09-23 17:00:03编辑:auto阅读(1743)

    python 操作文件的常用方式有如下

    读文件:r 模式
    实例演示1:
    f1 = open(file='D:\Python3.5-learn\模块2\character3_文件操作\staff_table.txt',mode='r',encoding='utf-8') # 以 r 的 模式,打开指定路径的文件 ,按照utf-8 的方式去读取

    data = f.read() # 读取文件,表示读取所有内容

    f.close() # 关闭文件

    实例演示2:
    f2 = open(file='D:\Python3.5-learn\模块2\character3_文件操作\staff_table.txt',mode='rb',encoding='utf-8') # 以 rb 二进制 的 模式,打开指定路径的文件 ,按照utf-8 的方式去读取

    data = f.read() # 读取文件,表示读取所有内容

    f2.close() # 关闭文件

    示例2和示例1的区别在哪?

    答:在于示例2打开文件时并未指定encoding,这是为何?是因为直接以rb模式打开了文件 ,rb是指二进制模式,数据读到内存里直接是bytes格式,如果想内容,还需要手动decode,因此在文件打开阶段,不需要指定编码

    循环遍历文件:

    f = open(file='D:\Python3.5-learn\模块2\character3_文件操作\staff_table.txt',mode='r',encoding='utf-8') #

    for line in f:

     print(line)

    f.close()

    写文件:w 模式
    实例演示1:
    f1 = open(file='D:\Python3.5-learn\模块2\character3_文件操作\staff_table.txt',mode='w',encoding='utf-8') # 以 w 的 模式,打开指定路径的文件 ,按照utf-8 的方式去写

    data = f.write(“.....”) # 写入指定的文件

    f.close() # 关闭文件

    实例演示2:
    f2 = open(file='D:\Python3.5-learn\模块2\character3_文件操作\staff_table.txt',mode='rb',encoding='utf-8') # 以 wb 二进制 的 模式,打开指定路径的文件 ,按照utf-8 的方式去读取

    data = f.write(“.....”) # 写入指定的文件

    f2.close() # 关闭文件

    提示:文件以w 或者 wb 的方式去操作的时候,会清空原有的文件,

    wb,写入时需要直接传入以某种编码的0100101,即:字节类型
    w 和 encoding,写入时需要传入unicode字符串,内部会根据encoding制定的编码将unicode字符串转换为该编码的 010101010

    追加文件:a模式
    f1 = open(file='D:\Python3.5-learn\模块2\character3_文件操作\staff_table.txt',mode='a',encoding='utf-8') # 以 w 的 模式,打开指定路径的文件 ,按照utf-8 的方式去写

    data = f.write(“\n11,Kevin Chen,22,13151054603,Sales,2013-04-01”) # 写入指定的文件

    f1.close() # 关闭文件

    文件操作时,以 “a”或“ab” 模式打开,则只能追加,即:在原来内容的尾部追加内容

    写入到硬盘上时,必须是某种编码的0101010,打开时需要注意:

    ab,写入时需要直接传入以某种编码的0100101,即:字节类型
    a 和 encoding,写入时需要传入unicode字符串,内部会根据encoding制定的编码将unicode字符串转换为该编码的 010101010

    读写模式:r+
    f1 = open("beiying2.txt", "r+",encoding="utf-8") # 以读写的方式打开文件
    data = f1.read() # 读取文件
    print(data)
    f1.write("\n first line") # 在文件的末尾追加文件
    f1.close() # 关闭文件

    写读模式:w+
    f1 = open("beiying.txt", "w+", encoding="utf-8")
    data = f1.read()
    print(data)
    f1.write("line 1")
    f1.write("\nline 2")
    f1.write("\nline 3")
    f1.write("\nline 4")
    f1.close()

    w+会先把文件清空,再写新内容,相比w模式,只是支持了一个读功能,且还只能读已经写入的新内容

    文件操作的其他方式:
    def flush(self, *args, **kwargs): # real signature unknown
    把文件从内存buffer里强制刷新到硬盘

    def seek(self, *args, *kwargs): # real signature unknown
    把操作文件的光标移到指定位置
    注意seek的长度是按字节算的, 字符编码存每个字符所占的字节长度不一样。
    如“路飞学城” 用gbk存是2个字节一个字,用utf-8就是3个字节,因此以gbk打开时,seek(4) 就把光标切换到了“飞”和“学”两个字中间。
    但如果是utf8,seek(4)会导致,拿到了飞这个字的一部分字节,打印的话会报错,因为处理剩下的文本时发现用utf8处理不了了,因为编码对不上了。少了一个字节

    def tell(self, *args, **kwargs): # real signature unknown
    返回当前文件操作光标位置

    def truncate(self, *args, *kwargs): # real signature unknown
    按指定长度截断文件
    指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。

关键字