zoukankan      html  css  js  c++  java
  • day8

    1、什么是文件
    文件是操作系统提供给用户或者说应用程序操作硬盘的一种功能

    2、为何要用文件
    读写文件就是在读写硬盘:我们对文件的读写操作都会被操作系统转换成硬盘的读写操作

    应用程序-------------》文件对象、文件句柄
    操作系统-------------》文件
    硬件-----------------》硬盘
    

    3、如何用文件

    """
    f = open(r'a.txt', mode='rt', encoding='utf-8')

    print(f) # 文件对象、文件句柄

    res = f.read()
    print(res)

    f.close()

    print(f)

    f.read()

    del f

    with open(r'a.txt', mode='rt', encoding='utf-8') as f,
    open('b.txt',mode='wt',encoding='utf-8') as f1:
    pass

    文件打开模式

    1、控制文件读写操作的模式

    r(默认)

    w

    a

    2、控制文件读写内容的模式

    t(默认的):读写都是以字符串为单位的,只适用于文件文件,必须指定encoding参数

    b:读写都是以bytes为单位的,适用于所有文件,一定不能指定encoding参数

    r模式:只读模式,如果文件不存在则报错,文件存在则文件指针处于文件开头

    f = open('a.txt',mode='rt',encoding='utf-8')

    # print(f.read())

    # print('='*50)

    # print(f.read())

    print(f.readable())

    print(f.writable())

    f.close()

    w模式:只写模式,如果文件不存在则创建空文档,文件存在则清空,文件指针处于文件开头

    f = open('a.txt',mode='wt',encoding='utf-8')

    # f.write("你好 ")

    # f.write("哈哈哈 ")

    # f.write("我擦勒 ")

    f.write("你好 哈哈哈 我擦勒 ")

    # print(f.readable())

    # print(f.writable())

    f.close()

    总结:w模式,在打开了文件不关的情况下,连续的write写入,新写的内容永远跟在后面

    a模式:只追加写模式,如果文件不存在则创建空文档,文件存在不会清空,文件指针处于文件末尾

    f = open('c.txt',mode='at',encoding='utf-8')

    # f.write("4444 ")

    # f.write("555 ")

    # f.write("6666 ")

    print(f.readable())

    print(f.writable())

    f.close()

    总结:a模式,在打开了文件不关的情况下,连续的write写入,新写的内容永远跟在后面,这一点与w模式相同

    不同的是,在打开了文件关闭然后重新打开的情况下,a模式永远写在后面

    b模式:读写都是以bytes为单位的,适用于所有文件,一定不能指定encoding参数

    with open('1.mp4',mode='rb') as f:

    res = f.read()

    print(res.decode('utf-8'))

    with open('a.txt',mode='rb') as f:

    res = f.read()

    print(res.decode('utf-8'))

    with open('a.txt',mode='ab') as f:

    f.write("啊手动阀手动阀".encode('utf-8'))

    例:文件拷贝功能

    # 方案一:

    with open('1.mp4',mode='rb') as f1,open(r'D:1111111.mp4',mode='wb') as f2:

    res = f1.read()

    f2.write(res)

    方案二:

    储备知识:

    with open('a.txt',mode='rt',encoding='utf-8') as f:

    # f.read()

    for line in f:

    print(line,end='')

    with open('1.mp4',mode='rb') as f:

    for line in f:

    print(line)

    具体实现:

    with open('1.mp4',mode='rb') as f1,open(r'D:1111111.mp4',mode='wb') as f2:

    for line in f1:

    f2.write(line)

    可读可写

    r+t

    w+t

    a+t

    r+b

    w+b

    a+b

    with open('a.txt',mode='r+t',encoding='utf-8') as f:

    print(f.readable())

    print(f.writable())

    print(f.read())

    f.write("22222222222222222222 ")

    with open('a.txt',mode='w+t',encoding='utf-8') as f:

    print(f.readable())

    print(f.writable())

    文件操作其他方式
    with open('a.txt',mode='rt',encoding='utf-8') as f:

    # lines = f.readlines()

    # print(lines)

    print(f.readline())

    print(f.readline())

    with open('a.txt',mode='wt',encoding='utf-8') as f:

    # f.write("111 222 333 ")

    # lines = ['111 ','222 ','3333 ']

    # for line in lines:

    # f.write(line)

    # f.writelines(lines)

    f.write('hello')

    f.flush()

    # f.writelines('hello')

    控制文件指针移动
    大前提:只有t模式下的,f.read(n)中的n代表的是字符个数,除此以外,关于指针的移动,单位都是字节bytes

    f.read()

    with open('a.txt',mode='rt',encoding='utf-8') as f:

    res = f.read(6)

    print(res)

    with open('a.txt',mode='rb') as f:

    # res = f.read(6)

    res = f.read(8)

    print(res.decode('utf-8'))

    f.truncate()

    with open('a.txt',mode='r+t',encoding='utf-8') as f:

    f.truncate(8)

    f.seek移动的全都是字节个数

    f.seek(字节个数,0)
    f.seek(字节个数,1)
    f.seek(字节个数,2)

  • 相关阅读:
    效率神器-uTools推荐和使用
    sqlserver数据库脱机和分离的区别
    JS "&&"操作符妙用
    小程序图片添加视频播放按钮图标
    js将秒数转换为时分秒格式
    分享一波技术党适合做浏览器首页的网站
    Coursera课程笔记----C++程序设计----Week7
    Coursera课程笔记----C++程序设计----Week6
    Coursera课程笔记----C++程序设计----Week5
    Coursera课程笔记----C++程序设计----Week4
  • 原文地址:https://www.cnblogs.com/zhangjianguoweiwei/p/14950229.html
Copyright © 2011-2022 走看看