zoukankan      html  css  js  c++  java
  • Python-18-文件处理

    文件处理流程:
    1、打开文件,得到文件句柄并赋值给一个变量
    2、通过句柄对文件进行操作
    3、关闭文件
    # Example 1
    
    # f = open('a',encoding='utf-8')          # 打开文件,得到文件句柄并赋值给一个变量
    # data = f.read()                          # 通过句柄对文件进行操作
    # print(data)
    # f.close()                                # 关闭文件
    ##################### 打开文件的模式 ##################
    默认为文本模式,只能是字符串(文件没有修改一说,全是覆盖!!)
    r -- 只读模式【默认模式;文件必须存在,不存在则抛出异常】
    w -- 只写模式【不可读;不存在则创建;存在则清空内容】
    a -- 只追加写模式【不可读;不存在则创建;存在则只追加内容】
    x -- 只写模式【不可读;不存在则创建;存在则报错】(不常用,没什么用)
    ##################### 打开文件的模式 ##################
    对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,
    使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
    rb wb ab
    以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
    ##################### 打开文件的模式 ##################
    "+" 表示可以同时读写某个文件
    r+, 读写【可读,可写】
    w+, 写读【可读,可写】
    a+, 写读【可读,可写】
    ##################### 打开文件的模式 ##################
    # 1、r -- 只读模式
    
    # f = open('a','r',encoding='utf-8')      # 默认打开模式就为 r
    # data = f.read()                          # 读取文件全部,如果这里读取了,下面再出现readline 就没有文件读取了。
    # print(data)
    # print(f.readable())                       # 结果:True  判断当前文件是否是-只读(r)
    # print(f.readline())                       # 读取文件 第一行 (一次读一行)
    # print(f.readline(),end="")                # 读取文件 第二行 并且第二行、第三行之间没有 另隔一行 换行
    # print(f.readline())                       # 读取文件 第三行
    
    # data = f.readlines()                        # 将文件所有行,按列表的形式输出
    # print(data)
    
    # f.close()
    
    
    # 2、w -- 只写模式
    
    # 写模式--如果文件不存在,新建一个文件;如果文件存在,会把该文件清空(==新建一个空文件,覆盖原文件)
    # f = open('a1','w',encoding='utf-8')
    # f.write("newmet.top == 初相识 01
    ")
    # f.write("newmet.top == 初相识 02
    ")
    # f.write("new
    met.top
    初相识 03
    ")
    # print(f.writable())              # 结果:True  判断当前文件是否是-只写(w)
    # f.writelines(['111
    ','222
    ','333
    '])
    #
    # f.close()
    
    # 3、a -- 只追加写模式
    
    # f = open('a1','a',encoding='utf-8')
    # f.write("写到文件最后")               # 类似 日志访问记录,自动追加到文件最后
    # f.close()
    
    
    # 4、f.close 可以不写,利用with关键字去只写、只读文件:
    
    # 1)打开一个文件:
    with open('a1','w',encoding='utf-8') as f:
        f.write("newmet.top
    初相识
    ")
    
    # 2)同时打开两个文件:
    with open('a','r',encoding='utf-8') as src_f,
            open('a1','w',encoding='utf-8') as dst_f:              # 同一行代码太长,加 enter 换行
        data = src_f.read()
        dst_f.write(data)
    ##################### 文件的修改 ##################
    # 1、文件取出来、修改
    
    src_f = open('文件修改','r',encoding='utf-8')
    data1 = src_f.readlines()      # 列表
    src_f.close()
    
    dst_f = open("文件修改-01","w",encoding="utf-8")
    # f2.writelines(data1)
    dst_f.write(data1[0])
    dst_f.close()
    
    # 2、文件覆盖
    
    src_f = open('文件修改','r',encoding='utf-8')
    data1 = src_f.readlines()      # 列表
    src_f.close()
    
    dst_f = open("文件修改","w",encoding="utf-8")
    # f2.writelines(data1)
    dst_f.write(data1[0])
    dst_f.close()
    
    
    # 上面1、2合并在一起:
    with open('文件修改','r',encoding='utf-8') as src_f,
            open('文件修改-01','w',encoding='utf-8') as dst_f:              # 同一行代码太长,加 enter 换行
        data = src_f.read()
        dst_f.write(data)
    ##################### b模式 ##################
    f = open('a1','rb')             # b模式不能指定编码
    data = f.read()
    print(data)                     # 二进制
    print(data.decode('utf-8'))    # 字符串
    f.close()
    
    
    f = open('a1','wb')             # b模式不能指定编码
    f.write(bytes('newmet
    ',encoding='utf-8'))    # 编码
    f.write('初相识'.encode('utf-8'))               # 编码
    f.close()
    
    f = open('a1','ab')             # b模式不能指定编码
    f.write('初相识'.encode('utf-8'))               # 编码
    f.close()
    ##################### 文件处理的其他方法 ##################
    f=open('a1','r+',encoding='utf-8')
    f.read()            #读取所有内容,光标移动到文件末尾
    f.readline()        #读取一行内容,光标移动到第二行首部
    f.readlines()       #读取每一行内容,存放于列表中
    print(f.encoding)   # 输出 读取时文件使用的编码
    f.flush()           # 刷新 保存
    print(f.name)       # 打印文件名
    
    f=open('a1','r+',encoding='utf-8',newline='')   # 读取文件中真正的换行符号(
    )
    
    # 光标的移动
    # 一: read(3):
    #   1. 文件打开方式为文本模式时,代表读取3个字符
    #   2. 文件打开方式为b模式时,代表读取3个字节
    # 二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate
    
    print(f.tell())     # 定位光标位置
    f.readline()
    print(f.tell())
    f.seek(10)
    print(f.tell())
    
    data=f.truncate(10)         # 截取从开始一直到第10个 部分
    print(data)
    
    ############   seek 0、1、2   ##########
    
    # 1、f.seek(3,0)
    # 0 可写可不写,代表从开头位置算起
    f=open('seek.txt','r',encoding='utf-8')
    print(f.tell())           # 0
    f.seek(10)
    print(f.tell())           # 10
    f.seek(3)
    print(f.tell())           # 3
    
    # 2、f.seek(3,1)
    # 1 代表相对位置,从上一次光标所在位置算起
    # 相对位置,只能是b模式,而且不能有encoding编码
    f=open('seek.txt','rb')
    print(f.tell())         # 0
    f.seek(10,1)            # 10
    print(f.tell())
    f.seek(3,1)
    print(f.tell())         # 13
    
    # 3、f.seek(3,2)
    # 2 代表相对位置,从末尾光标所在位置算起
    # 相对位置,只能是b模式,而且不能有encoding编码
    f=open('seek.txt','rb')
    print(f.tell())
    f.seek(-10,2)
    print(f.read())         # 结果:b'2
    newmet3'
    
    ############   seek 0、1、2   ##########
    
    # 看日志最后一行内容:
    
    # 1、基础方法:
    f=open('日志文件','rb')
    data=f.readlines()
    print(data[-1].decode('utf-8'))
    
    # 2、seek方法:
    
    # 看日志最后一行内容:
    f=open('日志文件','rb')
    for i in f:             # 循环文件的推荐方式  要一行给一行
        offs = -3           # 定义一个偏移量
        while True:
            f.seek(offs,2)
            data=f.readlines()
            if len(data)>1:
                print('最后一行:%s'%(data[-1].decode('utf-8')))
                break
            offs*=2
    # 倒序阅读,逐渐增加偏移量
  • 相关阅读:
    20200226 Java IO流——廖雪峰
    20200225 Java 多线程(2)-廖雪峰
    20200225 Java 多线程(1)-廖雪峰
    20200224 尚硅谷ElasticSearch【归档】
    20200224 一 概述
    20200222 尚硅谷Dubbo【归档】
    20200222 四、dubbo原理
    Improved robustness of reinforcement learning policies upon conversion to spiking neuronal network platforms applied to Atari Breakout game
    Reinforcement learning in populations of spiking neurons
    Solving the Distal Reward Problem through Linkage of STDP and Dopamine Signaling
  • 原文地址:https://www.cnblogs.com/newmet/p/10037201.html
Copyright © 2011-2022 走看看