zoukankan      html  css  js  c++  java
  • 22 Mar 18 补充数据类型+字符编码+文件处理

    补充:

    元组:相当于不可变的列表

    注意: t=(1,'a',[1,2,]), 列表中的元素可以变,id不变
     
    注意:集合里的元素是不可变的,集合时可变的,有多个值,集合不可以当集合的元素
     
    作业讲解:
    s='hello alex alex say hello sb sb'
    words=s.split()
    dic={}

    for word in words: #word='alex'
       
    dic.setdefault(word,words.count(word)) #dic={'hello':2,'alex':2}
    print(dic)

    换行:

    windows平台: (两个字符)换行, 为跳到行首, 为跳至下一行

    linux/ mac平台: (一个字符)为换行

    python:用 表换行,python帮忙转化成不同平台

    数据类型总结

    http://www.cnblogs.com/linhaifeng/articles/7133357.html

    字符编码

    A知识储备:

    文本编辑器存原理
    结论:在编写py的程序的时候,是没有语法的限制的,编辑的结果
            跟编写一个普通的文本文件是没有任何区别,
            只有把py程序交给python解释并且在运行的第三个阶段才有了
            语言意义

    文本编辑器读原理


    B、什么是字符编码
        人类的字符----》翻译-------》数字
        翻译的过程必须遵循一个标准:字符与数字一一对应的关系
        这个标准称之为字符编码表

        ASCII #起始阶段,满足英文和符号
        8bit=1bytes,一个英文字符占用1字节

        GBK
        16bit=2bytes ,2个字节表示一个中文字符,1字节表示一个英文字符

        unicode(内存中固定的编码):
        16bit=2bytes,2个字节表示一个字符
    #一方面兼容万国,另一方面提供各国和unicode之间的转化
    #现阶段还必须使用unicode以兼容硬盘上的用各国自创的编码语言,以后,当硬盘上的程序统一到utf-8上时,内存也有可能用utf-8编码

        utf-8:Unicode Transformation Format (硬盘)
            1字节表示一个英文字符,3bytes表示一个中文字符

        保证不乱吗的核心就是:
        文件是以什么编码存的,就必须以该读取
        强调:我们能控制的只是存到硬盘上的编码

        python3解释器:默认utf-8编码
        python2解释器:默认ascii编码 (当时没有utf-8)

        文件头的作用:#coding:utf-8 是告诉python解释器,用我指定的字符编码

    C、执行python程序第三个阶段发生的事
        会识别python语法,定义的字符串类型又涉及到字符编码的概念
        x='上' #x=str('上')
        python2:
            字符串分为两种形式:str和unicode
                x='上' #python2的str类型会按照文件头指定的编码来存‘上’

        python3:
            str:所有字符串都用unicode存


    D、转换
        unicode---编码encode--->gbk
        gbk------->解码decode---》unicode
     

    文件处理

    1. 打开文件的字符编码
    默认的打开文件的编码是:当前操作系统默认的编码,wingbklinuxutf-8
    f=open('a.txt',mode='r',encoding='utf-8')  #应用程序如果用utf-8编写,encoding后跟utf-8,否侧windows系统默认用gbk打开,会乱码。
    print(f.read())
    f.close()
    1. 文件处理的基本形式

    #1 打开文件‘

    # f=open(r'文件的路径',mode='打开文件的模式',encoding='操作文件的字符编码'#windows 平台默认gbklinuxmac平台默认utf-8
    #打开文件占两方面的资源(操作系统和应用程序),如果数据的传输是水的话,f相当于水舀(由操作系统生成交给应用程序)
    #open只能打开本地文件
    f=open(r'a.txt',mode='r',encoding=’utf-8’)  #r refer to rawstring
    #当文件在同一文件夹时,文件路径可以简写
    #mode 默认是rt(只读txt文件),当mode=’w’时,默认wt mode=’a’默认at
    print(f)

    #2 读/写

    print(f.read())       #读出所有, 
    print(f.readable())  #是否可读
    print(f.readline(), end=’’)  #读一行
     
    with open('ab.txt',encoding='utf-8') as f:
        for line in f:#推荐用f,不用f.realines(),因为f是读一行进内存,后者是读所有进内存
            print(line,end='')
     
    for line in f.readlines(): #循环文件不要使用该方式,因为在文件过大的情况下有可能会撑爆内存
       
    print(line,end='')

    print(f.readlines()) #以列表的形式读出所有数据  ['as ', 'as ', 'as ']

    #当文件不存在时报错

    **注意光标的移动,连续两次realines()时,第二次realines()读不出值。

    #3关闭文件

    f.close() #回收操作系统的资源

    **读写之后一定要回收操作系统的资源, f.close()执行后,应用程序的资源并没有回收,该部分资源由python自动回收。如果有with…(见后面),则不用执行f.close()。不能在f.close()前用del f,否则操作系统找不到f,报错。

    #4 用with管理

    ##with可以帮忙管理文件。当用with打开文件时,不需再输入f.close()。

    with open(r'ab.txt',mode='r') as f:
    print('===>')
    print(f.read())

    #with可以管理多个文件

    with open(r'a1.txt',mode='r') as f1,open('a2.txt',mode='r') as f2:
    print('===>')
    print(f1.read())
    print(f2.read())

    以上形式相当于:

    f1=open(r'a1.txt',mode='r')
    f2=open(r'a2.txt',mode='r')

    f1.close()

    f2.close()

    #5 w模式

    #w:只写模式
    #
    注意
    # 1
    、当文件存在时,清空
    # 2
    、当文件不存在时,创建空文档
    f=open(r'a1.txt',mode='w',encoding='utf-8') #默认是wt
    f.write('第一行 ')  #注意光标,如果没有 ,接着写
    f.write('第二行 ')
    f.writelines(['111111 ','222222 ','333333 '])
    f.write('aaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbb ccccccccccccccc ')
    f.close()

    #6追加模式a (一种特殊的写模式)

    #a:只追加写模式, 光标移动道文件末尾,日志文件一般用a
    #
    注意:
    #
    在文件不存在时,创建空文件
    #
    在文件存在时,光标直接跑到文件末尾
    f=open('access.log',mode='a',encoding='utf-8')
    print(f.writable())
    f.readlines() #报错
    f.write('5555555555555 ')

    f.close()
  • 相关阅读:
    unidac使用演示
    delphi序列化对象的方法总结
    ReadFileToBuffer
    unidac连接ORACLE免装客户端驱动
    WriteFileFromBuffer
    mvc模式
    unidac宏替换使用
    如何使用Navicat监控mysql数据库服务器
    环信(php)服务器端REST API
    laravel 框架接入环信遇到的坑()
  • 原文地址:https://www.cnblogs.com/zhangyaqian/p/py20180322.html
Copyright © 2011-2022 走看看