zoukankan      html  css  js  c++  java
  • day-08文件的操作

    三种字符串

    1.普通字符串:u‘以字符作为输出单位’

    print(u'abc')  # 用于显示

    2.二进制字符串:b‘二进制字符串以字节作为输出单位’

    print(b'abc')  # 用于传输

    3.原义字符串:r'以字符作为输出单位,所有在字符串中能被转义的符号在这都原样输出'

    print(u'a	b
    c')
    print(r'a	b
    c')  # 取消转义

    文件操作的三步骤

    1.打开文件:硬盘空间被操作系统持有,文件对象被应用程序持有

    f = open('source.txt', 'r', encoding='utf-8')

    2.操作文件

    data = f.read()

    3.释放文件:释放操作系统对硬盘空间的持有

    f.close()

    基础的读

    f = open('source.txt', 'r', encoding='utf-8')
    f.read()  # 将所有内容一次性读完
    f.read(10)  # 读取指定字符数
    f.readline()  # 一次读取一行(文件的换行标识就是结束本次读取的依据)
    f.readlines()  # 将所有内容读存,按换行标识作为读取一次的依据,存放为列表
    f.close()

    基础的写

    wf = open('target.txt', 'w', encoding='utf-8')
    
    wf.write('123
    ')  # 一次写一条,行必须用
    标识
    wf.write('456
    ')
    wf.flush()  # 向操作系统发送一条将内存中写入的数据刷新到硬盘
    wf.write('789
    ')
    wf.writelines(['abc
    ', 'def
    ', 'xyz
    '])  # 一次写多行,行必须用
    标识
    
    wf.close()  # 1.将内存中写入的数据刷新到硬盘 2.释放硬盘空间

    with...open语法

    优化整合了文件资源的打开与释放

      --在with的缩进内可以操作文件对象,一旦取消缩进,资源就被释放

    part1
    # as起别名,rf持有文件资源的变量
    with open('target.txt', 'r', encoding='utf-8') as rf:
        # 文件操作的具体代码
    # 一旦取消缩进,资源就被释放了
     part2
    with open('target.txt', 'r', encoding='utf-8') as rf1, open('target1.txt', 'r', encoding='utf-8') as rf2:
        print(rf1.read())
        print(rf2.read())
        
    # print(rf1.read())  # 报错
    # print(rf2.read())  # 报错
     part3
    with open('target.txt', 'r', encoding='utf-8') as rf1:
        with open('target1.txt', 'r', encoding='utf-8') as rf2:
    print(rf1.read())
            print(rf2.read())
        # print(rf1.read())  # 可以操作
        # print(rf2.read())  # 不可以操作

    文件的操作模式

    1.主模式:r | w | a | x

      --主模式只能选取一个,规定着主要的操作方式

    2.从模式:t | b | +

      --从模式也必须出现,但个数不一定是一个,为主模式额外添加功能

    r: 读,必须有
    w: 清空写,可有可无
    a: 追加写,可有可无
    x:创建写,必须无

    t:默认,按字符操作
    b:按字节操作
    +:可读可写

    # rt: 文件必须提前存在,不存在报错,文件操作采用字符形式 - 简写为 r
    # wt: 文件可以存在,也可以不存在,存在则清空后写入,不存在新建后写入,文件操作采用字符形式 - 简写为 w
    # at: 文件可以存在,也可以不存在,存在在之前内容的末尾追加写入,不存在新建后写入,文件操作采用字符形式 - 简写为 a
    
    # rb: 文件必须提前存在,不存在报错,文件操作采用字节形式
    # wb: 文件可以存在,也可以不存在,存在则清空后写入,不存在新建后写入,文件操作采用字节形式
    # ab: 文件可以存在,也可以不存在,存在在之前内容的末尾追加写入,不存在新建后写入,文件操作采用字节形式
    
    # r+t:文件必须存在的可读可写,默认从头开始替换写,按字符操作
    # w+t:文件存在清空不存在创建的可读可写,按字符操作
    # a+t:文件存在追加不存在创建的可读可写,按字符操作
    
    # r+b:文件必须存在的可读可写,默认从头开始替换写,按字节操作
    # w+b:文件存在清空不存在创建的可读可写,按字节操作
    # a+b:文件存在追加不存在创建的可读可写,按字节操作

    文件的操作编码问题

    t模式下:原文件采用什么编码,你就选取什么编码操作,如果不选取,默认跟操作系统保持一致
      -- t模式下一定要指定编码

    b模式下:硬盘的数据就是二进制,且能根据内容识别出编码,写入时的数据也是通过某种编码提前处理好的,所有在操作时,没有必要再去规定编码

    文件的复制

    1.文本文件的复制:可以t也可以b

    with open('target.txt', 'r', encoding='utf-8') as rf:
        with open('target2.txt', 'w', encoding='utf-8') as wf:
            for line in rf:
                wf.write(line)
    
    with open('target.txt', 'rb') as rf:
        with open('target3.txt', 'wb') as wf:
            for line in rf:
                wf.write(line)

    2.非文本文件只能采用b模式操作,不需要指定编码,因为不涉及编码解码过程

    with open('001.mp4', 'rb') as rf:
        with open('002.mp4', 'wb') as wf:
            for line in rf:
                wf.write(line)

    游标操作

    1.游标操作的是字节,所有只能在b模式下进行操作
     2.游标操作可以改变操作位置,r模式下可以改变位置进行操作,所有主模式选择r模式
     3.seek(offset, whence):
      -- offset为整数就是往后偏移多少个字节,负数就是往前偏移多少个字节
      -- whence:0代表将游标置为开头,1代表从当前位置,2代表将游标置为末尾

    # 你是日本人
    with open('target.txt', 'rb') as f:
        # 先读6个字节
        data = f.read(6)
        print(data.decode('utf-8'))  # 你是
        # 将游标从头开始往后偏移3个字节
        f.seek(3, 0)
        data = f.read(6)
        print(data.decode('utf-8'))  # 是日
        # 从当前游标位置往前偏移3个字节
        f.seek(-3, 1)
        data = f.read(3)
        print(data.decode('utf-8'))  #
    
        f.seek(-3, 2)
        data = f.read(3)
        print(data.decode('utf-8'))  #

     

  • 相关阅读:
    PAT 1088. Rational Arithmetic
    PAT 1087. All Roads Lead to Rome
    PAT 1086. Tree Traversals Again
    PAT 1085. Perfect Sequence
    PAT 1084. Broken Keyboard
    PAT 1083. List Grades
    PAT 1082. Read Number in Chinese
    求最大公因数
    [转载]Latex文件转成pdf后的字体嵌入问题的解决
    [转载]Matlab有用的小工具小技巧
  • 原文地址:https://www.cnblogs.com/klw1/p/10753026.html
Copyright © 2011-2022 走看看