day_09

上节课回顾

字符编码

什么是字符编码

二进制和字符的映射关系

字符编码的发展史

ascill码 --》美国人用

中国人也要用,gb2312;日本人也要用,shit……

早期,大家就是自己玩自己的,导致硬盘里各种编码的数据都有

但是有一天韩国人想看美国大片,就会导致乱码

所以说韩国人想统一世界的编码格式,最后美国人造出了unicode(内存)统一了

既然内存是unicode,那么保存按理来说也应该用unicode,但是unicode占用过多的内存空间

为了节省内存空间,保存用utf8

内存中是unicode,硬盘是utf8

未来硬盘,内存都将是utf8

gbk和gb2312

GB2312--->常用字

gbk--》所有字

总结:用什么编码写,就用什么编码读

python2和python3字符编码的区别

python解释器启动的流程

  1. python解释器相当于文本编辑器,读入字符 --》 字符编码
    1. python2默认是ascill码读入字符;python3默认utf8读入字符
    2. 如果在pycharm中的字符用的是gbk编码写入,如果你想用python正常读入字符,必须得加上coding:gbk
  2. 解析字符(有语法和关键字的概念)--》报语法/逻辑错误
  3. 存储变量,输出(往终端打印)--》字符编码
    1. python2用两种方式存储变量
      1. u'中文'用unicode存储变量,用unicode存储变量,如果终端默认utf8格式的编码,不会乱码
      2. '中文'用coding头指定的编码存储变量,假设coding头指定编码为gbk,如果终端默认utf8格式的编码,会乱码
    2. python3默认用unicode存储变量,用unicode存储变量,如果终端默认utf8格式的编码,不会乱码

不可能会用到,只是了解(常识性的东西)

今日所学

文件处理

什么是文件处理:修改存储的信息

什么是文件:操作系统提供的虚拟单位,用二进制来存储信息

操作文件的流程

  1. 打开文件
  2. 修改/读取文件
  3. 保存文件
  4. 关闭文件

文件的三种打开方式和两种模式

  1. r 只读不可写
  2. w 清空后在写
  3. a 追加写

t模式,针对文本

b模式,针对二进制

w和a模式可以自动创建文件

绝对路径和相对路径

绝对路径

从盘符开始一直到文件的位置

相对路径

执行文件的文件夹下的文件名,执行文件和打开文件属于同一文件夹下

with管理文件上下文

with提供一个自动关闭文件的功能(接触了操作系统的占用)

文件的高级应用

仅作了解

  1. 可读可写 r+(光标在文件头部,覆盖后面的字符)
  2. 可读可写 w+ (和w没任何区别)
  3. 可写可读 a+ (默认光标在尾部)

移动光标的位置

seek

with open('test.py', 'rb') as fr:
    fr.seek(5)  # 移动了3个字节,一个中文,默认从开头开始
    print(fr.read())

whence

规定只有0,1,2三种模式,0相当于从文件头开始,1相当于文件所在位置,2相当于从文件尾开始

tell

告诉你当前的位置

with open('test.py', 'rb') as fr:
    fr.seek(3, 0)
    print(fr.tell())

truncate:截断

with open('test.py', 'ab') as fa:
    fa.truncate(2)

移动光标(以字符为单位)

read
with open('test.py', 'r', encoding='utf8') as fr:
    print(fr.read(3))  # n表示n个字符,不加默认读取所有 # 中文和英文都属于一个字符

登录注册

# 注册

count = 0
while count < 3:
    username_inp = input('请输入你的用户名:')
    pwd_inp = input('请输入你的密码:')
    re_pwd_inp = input('请在此输入你的密码:')

    if not pwd_inp == re_pwd_inp:
        print('两次密码输入不一致')
        count += 1
        continue

    with open('user_info.txt', 'a', encoding='utf8') as fa:
        fa.write(f'{username_inp}:{pwd_inp}\n')  # :表示用户名和密码的分割;|用户和用户之间的分割
        fa.flush()
        break

# 登录
username_inp = input('请输入你的用户名:')
pwd_inp = input('请输入你的密码:')

with open('user_info.txt', 'r', encoding='utf8') as fr:
    for user_info in fr:
        username, pwd = user_info.split(':')

        if username.strip() == username_inp and pwd.strip() == pwd_inp:  # strip可以去掉两端的换行符
            print('登录成功')
            break
        # else:
        #     continue  # continue一般不写在最后一行
    else:
        print('登录失败')

# 一个项目从来都不会在知识点难倒你, 只会在逻辑方面难倒你(敲少了)

文件的修改

文件没有修改一说,只有覆盖

可以同时打开多个文件

with open('test.py', 'r', encoding='utf8') as fr, \
        open('test_swap.py', 'w', encoding='utf8') as fw:
    data = fr.read()

再大的文件都能修改

posted @ 2019-09-18 19:25  mqb11  阅读(185)  评论(0编辑  收藏  举报