python基础-文件操作

#######python基础-文件操作########

# 1、请问什么文件?
    文件其实就是一个虚拟的单位,为什么这么说?是什么时候才有了文件的概念(我说计算机哈),是有了操作系统之后,
    操作系统把硬盘上的数据,整理成一个一个文件,便于用户方便操作。是不是没有操作系统,你想怎么去操作文件呢?
    哈哈,你手动去计算机硬盘自己去刻读,但是你知道你想操作的数据在哪里嘛?不知道对吧。

# 2、比如pycharm解释器吧,它想操作一个文件的读写,请问它能自己去操作嘛?
    答案是不能,一个应用软件可以直接操作计算机硬件?那请问它是怎么才能操作硬盘上的数据。这么说吧,操作计算机硬件
    的只有操作系统才可以,所以一个应用软件想要操作硬盘上的数据,必须通过操作系统才行,然后让操作系统去帮你读写数据。

在python中,怎么去操作硬盘上的文件呢?(其实是让操作系统帮你操作)
    open这个方法
    f = open('a.txt',mode='rt')
    # 打开a.txt文件,只读t模式
    # 上面那个代码请问执行了哪些操作?
    # 首先执行open函数对吧,执行这个函数,就是让python解释器向操作系统发出一个请求,说帮我打开a.txt这个文件
    # 此时操作系统的内存中是不是有一份对a.txt文件操作的内存。
    # 执行完open函数,它有一个差不多文件对象的返回值,赋值给了f,这是不是变量的赋值操作。
    # 那么就会python解释器的内存中,开辟一个名称空间,将f扔进去,f后面对应的是函数返回值的内存地址对吧。
    ### 总结:是不是在python解释器内有一份对a.txt文件操作的内存,在操作系统中是不是也有。

    执行f.read()
    # 上面说了f就是一个对象,它下面就会有一些列的方法对吧
    # f.read()执行这句代码,又做了些什么操作,想一想?
    # python解释器向操作系统发出一个读的指令,操作系统就去硬盘中读取到操作系统的内存中
    # 再由操作系统读取到python解释器内存中。
    # 注意一下,这个f是不是没有执行解码格式,那么操作系统就会以默认的字符编码去解码(gbk),如果你的文件是以gbk的话,也可以不用指定
    # 但是最好还是指定一下,避免出错。encoding='utf-8'

    # f.close()
    # 这句代码是向操作系统发出可以关闭文件的请求,操作就会关闭对a.txt的编辑操作。
    # 注意:很多人都是忘记写f.close(),就算不写我程序也不错报错,干嘛不写啊。
    # 对,你程序是不会出错,你py文件执行完毕之后,python解释器就是自动释放内存,垃圾回收机制嘛,
    # 但是你在操作系统里的这份资源谁去回收(操作系统可能过一段时间会清理),最好你用完了对该文件的操作,
    # 习惯性的把操作系统的资源也即是释放。

上面说了一大堆,就是让你每次open一个文件,记得写close。
    # 思考?
        f = open('a.txt','rt',encoding='utf-8')
        data = f.read()
        f.close()
        print(f)
        print(f.read())
        # 请问上面代码执行结果,为什么

下面写下对文件的操作,无非就是读写吧。
    f = open('a.txt',encoding='utf-8')
    # 上面没写对文件的操作和对文件内容格式操作,默认为读(r),文本模式(t),文本模式就是字符串格式嘛
    f = open('a.txt','w',encoding='utf-8')
    # 上面没写对文件内容格式操作,那默认就是文本模式呗(t)

对文件操作:
    # r    只读模式
    # w    只写模式
    # a    只追加模式

对文件内容格式操作
    # t    文本模式(str)
    # b    二进制模式(bytes)

只读模式,下面的方法:
    f = open('a.txt','rt',encoding='utf-8')
    f.readline()    #只读一行
    f.read()        #读全部内容
    f.readlines()   #也是读全部内容,但是他的返回值一个列表,列表里的元素是每一行内容
    f.readable()    #是否可读
    f.writable()    #是否可写

只写模式,下面的方法:
    f = open('a.txt','wt',encoding='utf-8')
    f.write()    #写内容
    f.writelines()    #也是写,但是参数是一个可迭代的,就和上面readable一样,每个元素最为一行
    f.readable()    #是否可读
    f.writable()    #是否可写

只追加模式:
    f = open('a.txt','at',encoding='utf-8')
    f.write()  #追加,就是在文件最后开始写

对文件内容格式操作:
    t,b模式就不再多说了,读出来的是二进制,或者字符串,写进去的是二进制或字符串
    # 注意:数据在硬盘保存的是二进制,所以你在使用b模式的时候,就不要写encoding参数了
    # 还有就是t,b模式不能单独使用,必须配合a,w,r


忘了with这个方法
    with open('a.txt','rb') as f:
        pass
    with的功能就是你在它的代码块里写代码,写完了之后,就不需要执行f.close(),他会自动帮你执行
    对了,你可以多打开几个文件,用逗号区分,比如
    with open('a.txt','rb') as f,open('b.txt',''rb) as f2:
        pass

猜你喜欢

转载自www.cnblogs.com/zhuchunyu/p/9957281.html
今日推荐