day 08

day 08

一、字符编码

字符编码表就是纪律字符与数字一一对应的表
ASCII表:
      1、只支持英文字符串
      2、采用8位二进制数对应一个英文字符串
GBK表:
      1、支持英文和中文字符串
      2、采用8位二进制数对应一个英文字符串
         采用16位二进制数对应一个中文字符串
unicode:(内存中统一使用unicode)
       1、兼容万国字符串
       2、采用16位(16bit=2bytes)二进制数对应一个中文字符串,各别生僻字采用4bytes、8bytes。
       unicode的使用作为一个过度阶段,老的字符编码可以转换成unicode,但不能通过unicode互转。
utf-8
       1、英文-->1bytes、中文-->2bytes
结论:   (用python3)
       1、内存固定使用unicode,我们可以改变的是存入硬盘采用的格式
       +汉字--》unicode--》gbk
       英文+日语--》unicode--》shfit-jis
       万国文符---》unicode--》utf-8
       2、文本文件存取乱码问题
           存乱了:解决方法,编码格式应该设置成支持文件内字符串的格式
           取乱了: 解决方法,文件是用什么格式存的就用什么编码格式读入。
       3、python解释器默认读文件的编码
            python3中默认的是utf-8
            python2中默认的是ASCII
       4、保证运行python程序前两个阶段不乱码的核心法则:
            指定文件头
            在py文件首行加上 #coding:文件存入硬盘时所采用的编码格式
       5、pythone3中的str类型默认直接存储成unicode格式,无论如何都不会乱码
          python2中想要保住str类型不乱码:
          在py文件首行加上 #coding:文件存入硬盘时所采用的编码格式
          x=u'上',在字符串前面加上u
       6、编码:encode、解码:decode
          x='上' # str类型=》被存成uncide
          print(x)  ## 上
          x.encode('gbk')让unicode按gbk类型编码
          x.decode('gbk')让unicode按gbk编码类型解码

二、文件管理

1、什么是文件:
    文件是操作系统提供给用/应用程序操作硬盘的一种虚拟概念/接口
     用户/应用软件
       操作系统
     计算机硬件(硬盘) #硬盘中的数据不能被修改,只能覆盖。
2、为何要用文件:
  用户/应用程序可以通过文件将数据永久保存在硬盘中
   即操作文件就是操作硬盘
   
   用户和应用程序直接操作的是文件,对文件的所有操作,都是对操作系统发起系统调用,然后再由操     作系统转换成具体的硬盘操作。
3、如何使用文件:open()
    控制文件读写内容的模式:t和b
    强调b和t不能单独使用,必须与r/w/a连用
     
   t文本(默认的模式)
        1、读写都是以str(unicode)为单位的
        2、文本文件
        3、必须指定unicode='utf-8'
       #强调:t 模式只能用于操作文本文件,无论读写,都应该以字符串为单位,而存取硬盘本质都是二进制的形式,当指定 t 模式时,内部帮我们做了编码与解码
   b:读写单位二进制/Bytes,适用于所有文件,一定不能指定encoding参数。
   
   控制文件的读写操作模式
   read:只读模式,如果文件不存在则报错,文件存在的话文件指针处于文件开头。
   write:只写模式,如果文件不存在则创建文件,文件存在就清空,文件指针处于文件开头。
          write模式在文件打开而不关的情况下,连续的write写入,新内容永远在后面。
   a:只追加模式,如果文件不存在则创建文件,文件存在不清空,文件指针在末尾。
      跟write一样打开文件不关的情况下连续的write写入,新内容永远在后面。
       不一样的是当关闭文件重新打开时,write的写入,新内容永远在后面
   +:r+w++a(可读可写)
   
f = open(指定文件路径,指定文件模式,指定编码格式)
每次执行完程序必须执行f.close命令关闭文件资源
文件对象:数据和功能

with open(指定文件路径,指定读写模式,指定编码格式) as 变量名:
       with子代码运行结束之后会自动调用close关闭文件资源
       文件路径是必须的
       读写模式和编码格式是可选的
       如果不指定读写模式 那么默认使用r(只读)
如果不指定编码格式 那么默认使用当前计算机内部默认编码
在中国所有的windows电脑内部默认的编码是gbk

4、拷贝文件
with open('a.txt',mode='rt',encoding='utf-8') as f,open('b.txt',mode='wt') as f1:
   res = f.read()
   f1.write(res)
5. .readline()  #读取一行内容,光标移动到第二行首部
6. .readable()   #判断文件是否可读
7. .wirteable()  #判断文件是否可写
8. .readlines()  #把文件内容读成列表格式
9. .seek         #移动指针
10. .close()     #回收操作系统打开的文件资源
11. .flush()     #刷新
12. .name()    #查看文件名
13. .tell()    #查看光标停的位置
          .seek(字节个数,0):指针从开头开始移动
          .seek(字节个数,1):开始时指针在开头,然后指针读到那停到那,再次移动时从上次停的位置开始
          .seek(字节个数(负数),2):指针从末尾向左移动
案例1
    #实现用户登录功能
   创建一个文件a.txt把用户的账号密码存入到硬盘('cjz':123)
   username = input'请输入你的用户名:').strip()
   userpwd = input'请输入你的密码:').strip()
   with open('a.txt',mode='rt',encoding='utf-8') as f:
       for lin in f:
           name,pwd==lin.strip('\n').split(':')
           if username==name and userpwd==pwd:
               print('登陆成功')
               break
           else:
               print('用户名或密码错误')
 案例2
     #实现注册功能
   name = input'请输入你的用户名:').strip()
   pwd = input'请输入你的密码:').strip()
   with open'a.txt',mode='a',encoding='utf-8'as f:
       a = ('%s,%s\n'%(name,pwd))
       f.wirte(a)
 案例3
     #实现文件的拷贝功能
   wj1 = input('源文件:')
   wj2 = input'目标文件:'
   with open(r'%s'%wj1,mode='rt',encoding='utf-8') as f,\
   open(r'%s'%wj2,mode =='at',encoding='utf-8') as f1:
       for lin in f:
           f1.write(lin)
  案例4
     #实现动态查看最新一条日志
   import time
   with open('rizhi',mode='rt',encoding='utf-8') as f:
       f.seek(0,2)
       while True:
           res = f.readlin()
           if len(res)==0:
               time.sleep(0.5)
           else:
               print(res.decode('utf-8'))
               
  #文件修改方式1 (当文件内容过大时,内存会被占满,速度很快。)
     with open('a.txt',mode='rt',encoding='utf-8') as f:
       lin = f.read()   ## 当文件内容过大时,内存会被占满,速度很快。
     with open('a.txt',mode='wt') as f1:
       f1.write(lin.replace('',''))
  #文件修改方式2 (不会占用内存空间,但会产生一个新文件占用内存)
     with open('a.txt',mode='rt',encoding='utf-8') as f,\
     open('b.txt',mode='wt') as f1:
           for lin in f
           f1.write(lin.replace('',''))
     del a.txt
     fl.name('b.txt','a.txt')
   
           
   
   
   
   
   

 

posted @ 2021-06-09 18:56  c-j-z  阅读(93)  评论(0)    收藏  举报