zoukankan      html  css  js  c++  java
  • python-study-08

    上节课复习

    上节课复习:
    1、数据类型
    int
    float
    str
    list
    列表内的元素可以是任意类型
    tuple
    元组内的元素可以是任意类型
    dict
    字典的key必须是不可变类型
    字典的value可以是任意类型
    set
    集合内元素必须为不可变类型
    集合内元素无序
    集合内元素不能重复

    可变类型:值变,id不变
    列表,字典,集合
    不可变类型:值变,id也跟着变
    int,float,str,tuple

    可以按照索引取值都是有序
    str,list,tuple
    否则都是无序
    dict,set

    只能存一个值的:
    int,float,str

    可以存多个值的,(比喻为容器类型)
    list,tuple,dict,set

    2、字符编码
    unicode:内存(不能改变)
    2bytes存一个字符

    上-------unicode--------》4e0a
    上<-------unicode--------4e0a

    gbk:
    2bytes代表一个中文字符,1bytes代表一个英文字符
    utf-8
    3bytes代表一个中文字符,1bytes代表一个英文字符

    unicode-------编码encode---------》utf-8
    unicode《-------解码decode---------utf-8

    处理乱码问题,一个核心的思想:
    字符当初是以什么编码格式存的/编码就应该以什么编码方式解码

    python3中
    str类型的值默认就是unicode编码的结果
    name='何'
    print(name)

    bytes:可以当成二进制去看
    name_bytes=name.encode('utf-8')
    name_bytes.decode(''utf-8')

    今日内容:
    文件处理

    文件基本操作


    1 什么是文件?
    文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位
    文件的操作核心就:读、写
    即我们只需要对于进行读写操作,就是对操作系统发起请求,然后由操作系统将用户或者应用程序
    对文件的读写操作转换成具体的硬盘指令(比如控制盘片转动,控制机械手臂移动来读写数据)

    2 为什么要有文件?
    因为内存无法永久保存数据,但凡我们想要永久保存数据都需要保存到硬盘中,
    而操作文件就可以实现对硬件的操作

    3 如何用文件
    # 把内存中的数据存储到硬盘中去
    # 把硬盘中的数据读到内存中
    #rawstring
    f=open(r'E:SH_fullstack_s2day08a.txt',mode='r') # 向操作系统发起请求,要求操作系统打开文件,占用操作系统的资源
    data=f.read() # 向操作系统打开发起读请求,会被操作系统转成具体的硬盘操作,将内容由硬盘读入内存
    print(data)
    # del f
    f.close() #向操作系统发起请求,要求操作系统关闭文件,回收系统资源
    # print(f)
    # f.read()

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

    # 总结:
    #1、打开文件
    #2、读写
    #3、关闭

    文件的打开模式

    # 控制读写文件内容的结果有两种:t模式text,b模型bytes
    #注意:
    #1、t与b这两种模式均不能单独使用,都需要与r/w/a之一连用
    #2、默认的内容格式是t
    #3、只有文本文件才能用t模式,也只有文本文件才有字符编码的概念

    # 操作文件的基础模式有三种: #1、r,默认的 #2、w #3、a

    #r:read,只读模式
    #1、只能读,不能写
    #2、在文件不存在时,会报错,在文件存在的时候会将文件指针移动到文件的开头,读完就在末尾了
    # f=open('b.txt',mode='rt',encoding='utf-8')
    # data1=f.read() 这时候指针已经在文件末尾了
    # print('第一次:',data1)
    # # print(type(data1))
    #
    # # data2=f.read() #这时候读的就是空了 什么都没有
    # # print('第二次:',data2)
    # f.close()

    # f=open(r'b.txt',mode='rt',encoding='utf-8') #又重新打开了一次文件,指针还是在文件的开头
    # data2=f.read() #一次读完整个文件
    # print('第二次:',data2)
    # f.close()

    # f=open(r'b.txt',mode='rt',encoding='utf-8')
    # # print(f.readable()) #是否可读
    # # print(f.readline(),end='') #一行一行的读,因为文件内有换行符 所以把print的换行符取消了
    # # print(f.readline(),end='')
    #
    # lines=f.readlines() #和read差不多
    # print(lines)
    # f.close()
    #
    #w:只写模式
    #1、只能写,不能读
    #2、在文件不存在时会创建空文件,在文件存在的时候会将文件内容清空
    # f=open(r'c.txt',mode='wt',encoding='utf-8')
    # # print(f.readable()) #报错,不可读
    # # f.read()
    # # f.write('你好啊我的天 你好啊我的地 啊啊啊啊啊啊 ')
    # # f.write('4444 ')
    # # f.write('5555')
    #
    # lines=['1111 ','2222 ','33333 ']
    # # for line in lines:
    # # f.write(line)
    # f.writelines(lines) #列表一次性读进去,writelines相当于writeline+for循环
    #
    # f.close()

    #a:只追加写模式
    #1、只能写,不能读
    #2、在文件不存在时会创建空文件,在文件存在的时候会将指针移动到文件末尾

    # f=open('d.txt',mode='at',encoding='utf-8')
    # print(f.readable()) #报错不可读
    # f.read()

    # f.write('555555 6666 ')
    # f.writelines(['77777 ','8888888 ','999999999 '])

    # f.close()

    #b:二进制模式
    #注意:
    #1、一定不能指定字符编码,只有t模式才与字符编码有关
    #2、b是二进制模式,是一种通用的文件读取模式,因为所有的文件在硬盘中都是以二进制形式存放的

    # f=open('egon.jpg','rb')
    # data=f.read()
    # print(type(data))
    # f.close()

    # f=open('oldsiji.mp4','rb')
    # data=f.read()
    # 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)
    # f.close()

    # f=open('d.txt','rb')
    # for line in f:
    # print(line)
    # 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'))
    #
    # 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')
    # # print(res,type(res))
    # f1.write(res)

    with open('e.txt','rb') as f,
    open('j.txt','wb') as f1:
    #文件的操作
    f1.write(f.read())

    今日作业
    今日作业:
    一、实现用户注册功能
    思路:
    用户输入用户名、密码
    将用户输入的内容按照固定的格式,比如:egon:123,存入文件
    可以往一个文件中重复注册新的用户名和密码
    while True:
        name_inp = input('name>>: ').strip() #要验证用户名得事先创建这个文件
        pwd_inp = input('password>>: ')
        chk_pwd_inp = input('password>>: ')
        if pwd_inp == chk_pwd_inp:
            with open('db_file',mode='at',encoding='utf-8') as f:
                f.write('%s:%s
    ' %(name_inp,pwd_inp))
        else:
            print('两次密码不一致')
    View Code

    二、实现用户验证功能更:
    思路:
    用户输入账号密码,从文件中读出账号密码,与用户输入的进行比对
    name_inp = input('username>>: ').strip()
    pwd_inp = input('password>>: ')
    with open('db_file',mode='rt',encoding='utf-8') as f:
        for line in f:
            line = line.strip('
    ')
            line = line.split(':')
            name = line[0]
            pwd = line[1]
            if name_inp == name and pwd_inp == pwd:
                print('验证成功')
                break
        else:
            print('用户名或密码错误')
    View Code

    三、编写程序,实现文件拷贝功能
    思路:
    用户输入源文件路径和目标文件路径,执行文件拷贝
    import sys
    if len(sys.argv) != 3:
        print('usage: cp source_file target_file')
        sys.exit()
    source_file,target_file=sys.argv[1],sys.argv[2]
    with open(source_file,'rb') as read_f,open(target_file,'wb') as write_f:
        for line in read_f:
            write_f.write(line)
    View Code

    明早默写:
    循环读取文件
    f=open('db_zhuce.txt','rt',encoding='utf-8')
    for line in f:
        print(line)
    f.close()
    View Code
       只读的方式读取文件,并说明注意事项
    with open('db_zhuce.txt',mode='rt',encoding='utf-8') as f:
         print(f.read())
    #1、只能读,不能写
    #2、在文件不存在时,会报错,在文件存在的时候会将文件指针移动到文件的开头,读完就在末尾了
    View Code

    只写的方式写文件,并说明注意事项
    with open('w',mode='wt',encoding='utf-8') as f:
         f.write('w')
    #1、只能写,不能读
    #2、在文件不存在时会创建空文件,在文件存在的时候会将文件内容清空
    View Code

    只追加写的方式写文件,并说明注意事项
    with open('w',mode='at',encoding='utf-8') as f:
        f.write('
    r')
    # 1、只能写,不能读
    # 2、在文件不存在时会创建空文件,在文件存在的时候会将指针移动到文件末尾
    View Code

    简述t与b模式的区别
    # t模式:只有文本文件才能用t模式,也只有文本文件才有字符编码的概念
    # b模式:一定不能指定字符编码,只有t模式才与字符编码有关
    # b是二进制模式,是一种通用的文件读取模式,因为所有的文件在硬盘中都是以二进制形式存放的
  • 相关阅读:
    Java基础(五):数组和Java方法
    Java基础(四):Java Number & Math 类、Character 类、String 类、StringBuffer & StringBuilder 类
    Java基础(三):修饰符、运算符、循环结构和分支结构
    Java基础(二):基本数据类型和变量类型
    Java基础(一):简介
    变量声明置顶规则、函数声明及函数表达式和函数的arguments属性初始化
    JS操作JSON常用方法
    站点的良好体验在网络优化中极为重要
    JVM基础(二) 实现自己的ClassLoader
    [DLX精确覆盖] hdu 3663 Power Stations
  • 原文地址:https://www.cnblogs.com/xujinjin18/p/9133427.html
Copyright © 2011-2022 走看看