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

    一、文件基本操作

    '''
    1 什么是文件?
        文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位
        文件的操作核心就:读、写
        即我们只需要对于进行读写操作,就是对操作系统发起请求,然后由操作系统将用户或者应用程序
        对文件的读写操作转换成具体的硬盘指令(比如控制盘片转动,控制机械手臂移动来读写数据)
    
    2 为什么要有文件?
        因为内存无法永久保存数据,但凡我们想要永久保存数据都需要保存到硬盘中,
        而操作文件就可以实现对硬件的操作
    
    3 如何用文件
    '''
    # name='egon'
    # pwd='123'
    # 把内存中的数据存储到硬盘中去
    
    # l=[1,2,3]
    # l.append(4)
    # l.append(5)
    # print(l)
    
    # 把硬盘中的数据读到内存中
    #rawstring        #原生字符串
    '''G:python二期一月day8.   --------:你好啊'''#改成英文就不会报错
    f=open(r'G:python二期一月day8.txt',mode='r') # 向操作系统发起请求,要求操作系统打开文件,占用操作系统的资源
    #拷贝文件的绝对路径,前面加r取消绝对路径中反斜杠的特殊意义:SH_fullstack_s2day08a.
    # f1=10
    # f2='aaaa'
    # f2.index()
    # print(f)      #打印可以看到打开文件路径的结果:<_io.TextIOWrapper name='G:\python二期\一月\day8\b.txt' mode='r' encoding='cp936'>
    # y=2
    data=f.read() # 向操作系统打开发起读请求,会被操作系统转成具体的硬盘操作,将内容由硬盘读入内存
    print(data)    #打开文件用了另外一套字符编码,所以会解码报错  UnicodeDecodeError:   'gbk' codec can't decode byte 0x8a in position 8: incomplete multibyte sequence
    
    del f        #f已经被删除,此时接着打印会报错,NameError: name 'f' is not defined
    # f.close() #向操作系统发起请求,要求操作系统关闭文件,回收系统资源
    print(f)
    # f.read()
    
    # 总结:
    #1、打开文件
    #2、读写
    #3、关闭

    二、相对路径与绝对路径

    #1、绝对路径:从盘符(C:\ E:\ D:\)开始写一个完整的路径
    #2、相对路径:相对于当前执行文件所在的文件夹开始找
    f=open(r'aa.txt')

    三、文件的打开模式

    # 控制读写文件内容的结果有两种:t模式text,b模型bytes
    #注意:
    #1、t与b这两种模式均不能单独使用,都需要与r/w/a之一连用
    #2、打开一个文件默认的内容格式是t
    #3、只有文本文件才能用t模式,也只有文本文件才有字符编码的概念
    
    
    
    # 操作文件的基础模式有三种:
    #1、r,默认的
    #2、w
    #3、a
    
    
    #r:read,只读模式
    #1、只能读,不能写(执行写的操作会报错即f.read())
    #2、在文件不存在时,会报错,在文件存在的时候会将文件指针移动到开头
    # f=open(r'b.txt',mode='rt',encoding='utf-8')
    # data1=f.read()
    # date2=f.write('你好啊')    #r只读模式下不支持写,执行就会报错   io.UnsupportedOperation: not writable
    # print('第一次:',data1)      #第一次: aaaaaaaa
    # print(type(data1))           #<class 'str'>  t模式下都是以str为单位
    # f.close()
    # data2=f.read()
    # print('第二次:',data2)   # 第二次:         执行第一次读操作指针已经移到了文件的末尾,所以第二次读的时候,会接着第一次继续往后读,读到的内容为空
    # f.close()                                   #第一次文件读完关闭,就不会出现读到的内容为可空,
    #重新打开该文件读取其内容,会从文件的开头开始金兴发读取,这样结果就不会为空
    # f=open(r'b.txt',mode='rt',encoding='utf-8')
    # data2=f.read()
    # print('第二次:',data2)      #第二次: aaaaaaaa
    # f.close()
    
    # f=open(r'b.txt',mode='rt',encoding='utf-8')
    # print(f.readable())              # True  判断文件是否是以读的模式进行打开的
    # print(f.readline(),end='')       #aaaaaaaa,文件内容结尾有一个换行符,使用end=''取消换行,
    # print(f.readline(),end='')       #bbbbbbbb   readline每次读取文件的一行内容
    #
    # lines=f.readlines()                #底层原理就是利用for循环,将文件内容一行一行全部读出来,放入一个列表中['aaaaaaaa
    ', 'bbbbbbbb
    ', 'cccccccc']
    # print(lines)
    # f.close()
    
    
    #w:只写模式
    #1、只能写,不能读
    #2、在文件不存在时会创建空文件,在文件存在的时候会将文件内容清空
    # f=open(r'c.txt',mode='wt',encoding='utf-8')
    # print(f.readable())        #结果为Flase,说明文件不是以读的模式进行打开的
    # f.read()                   #会报错io.UnsupportedOperation: not readable  ,文件在只写模式下,不能进行读操作
    # f.write('你好啊我的天
    你好啊我的地
    啊啊啊啊啊啊
    ')   #在只写模式下,向文件中写入内容,在没关闭文件的情况下,可以一直想文件中写内容
    # f.write('4444
    ')
    # f.write('5555')
    
    # lines=['1111
    ','2222
    ','33333
    ']
    # for line in lines:
    #     f.write(line)
    # f.writelines(lines)   #writelines本质就是利用for循环,将列表中的内容加入到文件中
    # f.close()
    
    
    #a:只追加写模式
    #1、只能写,不能读
    #2、在文件不存在时会创建空文件,在文件存在的时候会将指针移动到文件末尾,(这样就可以向文件中追加内容)
    
    # f=open('d.txt',mode='at',encoding='utf-8')
    # print(f.readable())
    # f.read()            #a追加模式下,只能写不能读,读会报错io.UnsupportedOperation: not readable
    
    # f.write('555555
    6666
    ')      #文件存在只会将写的内容追加到文件的末尾,而不会将文件内容清空
    # f.writelines(['77777
    ','8888888
    ','999999999
    '])
    # f.close()
    
    #b:二进制模式,bytes模式
    #注意:
    #1、一定不能指定字符编码,只有t模式才与字符编码有关。。。。。。。。。。。。。。。。。。。
    #2、b是二进制模式,是一种通用的文件读取模式,因为所有的文件在硬盘中都是以二进制形式存放的
    
    # f=open('egon.jpg','rb')
    # data=f.read()
    # print(type(data))          #<class 'bytes'>
    # print(data)                #b模式下读到的文件内容是一串十六进制数
    # f.close()
    
    # f=open('oldsiji.mp4','rb')
    # data=f.read()               #b模式下,读取视频的内容结果也是一堆十六进制数
    # print(data)
    # f.close()
    
    # f=open(r'F:oldsiji.mp4','wb')
    # f.write(data)
    # f.close()
    
    
    # 循环读
    # f=open('d.txt','rt',encoding='utf-8')     #当文件很大时,我们应该进行循环进行读取,一次降温将内容读取出来,可能会导致内存占满,出现死机卡顿现象
    # for line in f:
    #     print(line)       #print自带换行符,所以循环打印出来的结果会出现每隔一行有一个空格
    # f.close()
    
    
    # f=open('d.txt','rb')
    # for line in f:
    #     print(line)       #b模式下会将跳到行首和换行符打印出来,还会显示bytes类型-------b'11111
    '
    # f.close()
    
    # f=open('oldsiji.mp4','rb')
    # for line in f:
    #     print(line)      #循环打印视频中的内容,以十六进制的形式显示出来
    # f.close()
    
    
    # f=open('e.txt','wb')
    # f.write('你好啊'.encode('utf-8'))    #b模式下都是以bytes为单位,写内容到打开的文件中去,就需要先进行编码,
    # f.close()
    
    
    # f=open('e.txt','ab')
    # f.write('大家好,我是egon'.encode('utf-8'))
    # f.close()
    
    
    # 上下文管理
    # with open('e.txt','rb') as f,open('j.txt','wt',encoding='utf-8') as f1:
        #文件的操作
        # src_data=f.read()
        # res=src_data.decode('utf-8')  #将t模式下打开的文件e.txt内容读取出来,写入到t模式下打开的文件中去,需要先将原字符串进行编码
        # print(res,type(res))
        # f1.write(res)
    
    
    
    # with open('e.txt','rb') as f,
    #         open('j.txt','wb') as f1:
    #     #文件的操作
    #     f1.write(f.read())
  • 相关阅读:
    python疑难问题---5、二维列表初始化
    python疑难问题---4、python文件读写
    心得体悟帖---200701(你以为后面比当下好,其实还真的不一定)
    心得体悟帖---200701(《隐秘的角落》成熟的孩子小白)
    div垂直居中 css div盒子上下垂直居中
    iOS 7 新版微信 URL 不支持跳转 App Store 的解决方案
    HTML5 LocalStorage 本地存储
    WDCP是什么 关于WDCP的详细介绍
    前端框架用哪个好
    GWT 实现文件上传和下载
  • 原文地址:https://www.cnblogs.com/sui776265233/p/9133753.html
Copyright © 2011-2022 走看看