• python基础14_文件操作


    文件操作,通常是打开,读,写,追加等。主要涉及 编码 的问题。

    #!/usr/bin/env python
    # coding:utf-8
    
    
    ## open实际上是从OS请求,得到文件句柄
    f = open('test', encoding='utf-8') # 打开文件,并且使用指定编码
    data = f.read() # 读文件
    f.close() # 使用完成要记得释放资源
    print(data)
    
    f2 = open('t2') # 默认以GBK编码读取,所以需要文件也是以同样的编码保存
    print(f2.readable()) # 是否可读
    d2 = f2.readline() # 一次读一行,会包括末尾的换行符
    print(d2,type(d2))
    print(f2.readline())
    print(f2.readlines()) #从光标处开始,读取全部至末尾的行,以list的形式
    f2.close()
    
    ## 文件打开模式:  基本,只读,只写
    # 默认是只读模式,
    '''
    #1. 打开文件的模式有(默认为文本模式):
    r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    w,只写模式【不可读;不存在则创建;存在则清空内容】
    a, 之追加写模式【不可读;不存在则创建;存在则只追加内容】
    
    #2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
    rb 
    wb
    ab
    注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
    
    #3. 了解部分
    "+" 表示可以同时读写某个文件
    r+, 读写【可读,可写】
    w+,写读【可读,可写】
    a+, 写读【可读,可写】
    
    
    x, 只写模式【不可读;不存在则创建,存在则报错】
    x+ ,写读【可读,可写】
    xb
    
    更多可参考: http://www.cnblogs.com/linhaifeng/articles/5984922.html#_label2
    '''
    f = open('测试.txt','w',encoding='utf-8')
    # f.read() # 只写的文件不可读
    print(f.writable()) # 判断是否可写
    f.write('1111111111111
    ') # 默认会文件内容清空,再写。
    f.write('222
    ')
    f.write('3333333
    ')
    
    f.writelines(['aaaaaaaa
    ','bbbbbb
    ']) # 以列表的方式写入,且只能是字符串内容。
    f.close()
    
    
    fo = open('测试.txt','a',encoding='utf-8') #
    fo.write('kkkkkkkk
    bbbbbb
    大家都来测试吧。')
    # print(fo.read()) # 不可读
    fo.close()

    使用 with 关键字,open的写法不同。

    #!/usr/bin/env python
    # coding:utf-8
    
    # 使用 with关键字,则打开的文件不用手动关闭,python会自动释放资源
    
    with open('t3','r',encoding='utf-8') as f:
        a = f.read()
        print(a)
    
    
    # 也可以 with 打开多个文件,换行的话,以  结尾
    # 此例自动读取了一个文件,写入到另一个文件。且编码发生改变。
    with open('t2','r',encoding='gbk') as f2, 
            open('t4','w',encoding='utf-8') as f3:
        data = f2.read()
        f3.write(data)

    一个小练习,模拟了文件修改的过程。

    #!/usr/bin/env python
    # coding:utf-8
    
    #  r+ 模式可读可写,并且容易操作,并且不会清空文件内容。
    # fop = open('测试.txt','r+',encoding='utf-8')
    # fop.write('9999999999') # 如果 r+ 方式一开始就写,那么会从文件头部开始写。
    # c = fop.read()
    # print(c)
    #
    # fop.write('
    
    ggggggggggg')
    # fop.close()
    
    
    ## 模拟文件的修改过程,即先将文件读入内存,经过程序修改后,再写入硬盘。
    
    srf = open ('t3','r',encoding='utf-8')
    da = srf.readlines()
    srf.close()
    
    print(da)
    lis =[]
    for i in da:
        a = i.replace('8','')
        lis.append(a)
    
    # print(list(lis))
    #
    dsf = open('t3','w',encoding='utf-8')
    dsf.writelines(lis)
    dsf.write('88888888888888
    ')
    dsf.close()

    还有那个 seek() 用来操作光标:

    #!/usr/bin/env python
    # coding:utf-8
    
    f = open('t5','a+',encoding='gbk')
    print(f.encoding) # 得到的是打开文件时的编码,跟源文件编码无关
    # print(f.read())
    f.close() # 如果不关闭,文件则不能删除。
    
    
    # r+ 模式要注意先读后写 与 先写后读的区别 因为光标所处的位置 fo
    = open('t6','r+',encoding='utf-8') fo.write('11111 ') fo.write('abcde ') fo.flush() # 将内存中的操作保存到硬盘 print(fo.name) print(fo.readlines()) fo.close() fop = open('t6','r',encoding='utf-8',newline='') # newline参数表示不处理OS的特殊字符,原样输出真正的换行符号 print(fop.tell()) # 告诉你光标的位置 断点续传时需要监控光标位置 print(fop.readlines()) print(fop.tell()) fop.close() fope = open('t7','r',encoding='utf-8',newline='') # newline参数表示不处理OS的特殊字符,原样输出真正的换行符号 fope.seek(3) # 光标移动到多少字节,默认从头开始 print(fope.read()) fope.close() fopen = open('t8','r+',encoding='utf-8',newline='') # truncate是截取文件内容,不能以w 或w+ 来打开。 # fopen.seek(5) fopen.truncate(15) ###### ####### # 文件操作,参考 : http://www.cnblogs.com/linhaifeng/articles/5984922.html#_label13

    ### seek()控制光标的位置。括号里面是按字节数来控制位置(utf8是3个字节) ### read() 括号里则是按字符数

    #!/usr/bin/env python
    # coding:utf-8
    
    ### seek()控制光标的位置。括号里面是按字节数来控制位置(utf8是3个字节)
    ### read() 括号里则是按字符数
    ## 第二个参数:0 从头开始,1 相对位置开始,2 从末尾倒着来。
    ## 其中后两种模式只能以 b 方式打开文件 f = open('t8','ab+') f.seek(0,2) # 直接从文件末尾开始 print(f.read()) f.seek(-2,2) # 从文件末尾往回两个字节 print(f.read()) f.seek(5,2) # 从文件末尾再往后5个字节 f.write(' 8888888'.encode('utf-8')) # 在文件的末尾添加内容

    # ## 读取日志文件的最后一行。 with open('log','rb') as fop: offs = -50 while True: fop.seek(offs,2) lis = fop.readlines() # 读取从光标处到末尾 if len(lis) > 1: print(lis[-1].decode('utf-8')) break offs *= 2
    #!/usr/bin/env python
    # coding:utf-8
    
    import time
    
    
    # b 以二进制字节方式打开文件。 byte
    # 好处,是可以跨平台。但是对Linux没什么用,因为Linux本身就是以二进制方式打开文件。
    # 可以打开视频 图片 等类型文件。
    
    f = open('t5','rb') # b方式不能指定编码
    # f.readable()
    a = f.read()
    print(a)
    print(a.decode('utf-8'))
    f.close()
    
    # fo = open('t5','wb')
    # fo.write(bytes('abcdefg
    大家一起上吧。
    ',encoding='utf-8')) # 使用内置bytes函数来转换
    # fo.write('今天天气真热
    '.encode('utf-8')) # 直接用字符串的 encode 方法来编码
    # fo.close()
    
    fo = open('t5','ab')
    fo.write(bytes('abcdefg
    大家一起上吧。
    ',encoding='utf-8')) # 使用内置bytes函数来转换
    fo.write('今天天气真热
    '.encode('utf-8')) # 直接用字符串的 encode 方法来编码
    fo.close()
    
    ## open 函数如果不传参数,默认以 rt 方式打开
  • 相关阅读:
    Prime Time使用
    cache与MMU与总线仲裁
    IUS tcl cmd
    CPU cache
    generated clock
    PL301 matrix内部模块
    014-数据结构-树形结构-基数树、Patricia树、默克尔树、梅克尔帕特里夏树( Merkle Patricia Tree, MPT)
    001-软件架构概览、maven补充【分包工程、合并包、web容器插件】、git补充
    013-数据结构-树形结构-决策树
    012-数据结构-树形结构-哈希树[hashtree]、字典树[trietree]、后缀树
  • 原文地址:https://www.cnblogs.com/frx9527/p/python_14.html
Copyright © 2020-2023  润新知