• python语言基础笔记


    二进制数据则由bytes类型表示
    python没有二进制类型,但可以存储二进制类型的数据,就是用string字符串类型来存储二进制数据,这也没关系,因为string是以1个字节为单位的。



    b'xe4xb8xadxe6x96x87'                                      x表示16进制
    ______________________________________________________________________________
    #coding=gbk
    var=input("请输入十六进制数:")                            #16进制转化二进制
    b=bin(int(var,16))                                                    
    print(b[2:])
    _____________________________________________________________________________________


     print(format(ord('周'),'b'))                          中文转化8进制再转二进制;

    string:UNICODE            unicode类型名词叫:string       unicode是文本显示用,根据不同的软件可以encoding不同的软件显示编码。
    bytes: bytes            bytes类型名词叫:bytes            python3编码最大的改变: 把字节串与字符串彻底分开!bytes为存储字节码编码方式
                                                            (中文显示unicode,encode--utf8--存储为utf8下的bytes字节码),解码需要decode

    把中文以二进制方式输出打印:unicode----->utf8/gbk------->bytes(16进制)---->二进制

        示例:
                
                s=input('your name:')
                print(s.encode(encoding='utf8'))
                a=str(s.encode(encoding='utf8'))
                location=0
                letter=[]
                for i in a:
                    location=location+1
                    po=location+2
                    if i=='x':
                        # print(a[location])
                        # print(a[location:po])
                        var=a[location:po]
                        b=bin(int(var,16))
                        letter.append(b[2:])
                print(letter)

    _____________________________________________________________________________________

    随机数字示例:

    import string
    import random
    import re
    list = [chr(i) for i in range(65,91)] + [chr(i) for i in range(97,123)] + [ str(i) for i in range(10)] #大写字母+小写字母+数字
    FH = ('!','@','#','$','%','&','_') #特殊字符
    for f in FH:
        list.append(f)
    num = random.sample(list,10)
    str=''
    value = str.join(num) #将取出的十个随机数进行重新合并                num是数组
    if not value[0].isdigit():
      print(value)

    _____________________________________________________________________________________

















    流程:

    1:打开文件:       
            open("")
            f = open('test')
            data = f.read(5) #读指定个数的字符;
            data = f.read(5) #从光标位置 读指定个数字符;
            data = f.readline() 读取一行,包括改行换行符;
            data = f.readlines() # 列表结果;

                    
        with open("ts1") as f: 第二行有缩进;控制块,推出控制块,省去f.close()    #  f = open("ts1")      相等;



    2、操作文件:    读写; 默认r模式;

                    f = open("test2",mode='a',encoding='utf8')     文件追加写;
                    f = open("test2",mode='w',encoding='utf8')   文件覆盖写;
                    f = open("test2",mode='x',encoding='utf8')   文件提醒;有此文件;并且报错;



                    可读,可写模式: r+  w+ a+


                    r+ 模式,追加写;  默认光标在开始位置;
                    w+ 模式,覆盖写,想读取内容;seek调整;
                    a+ 模式  光标无论在什么位置,追加位子都在最后;  读内容用seek调整;



    *********************************************************************************************


                                        rb      wb        ab



    在wb模式下:字符串转化字节串; .encode("utf8")      过程:

    f = open("t3",mode="wb")
    f.write("where is xialv 李节".encode("utf8"))
    *********************************************************************************************
    f=open("test","rb")  不需要解码过程;
    b'test where is xialvwhere is xialvwhere is xialv'
    *********************************************************************************************


                    r        w        a


    在w模式下:默认转化
    f = open("t3",mode="w",encoding="utf8")
    f.write("where is xialv 李节")

    *********************************************************************************************

    调整光标位置:f.seek(0)   see() 光标 按照字节走; 不同于read()方法;

    打印当前光标位置: tell()



    3、关闭文件:




    4 、时间操作;
                  import time
                  time.sleep(100)
                  f.flush()   立即存储;
                    
                  import sys
                  sys.stdout.write("hello")  跟f一样,跟文件一样;屏幕输出;


                          光标移动到开头; 光标移动到下一行;



    例子4:   百分比打印:


                    import sys
                    for i in range(101):
                        s=" %d%% %s"%(i,"#"*i)
                        sys.stdout.write(s)
                        sys.stdout.flush()

                        import time
                        time.sleep(0.2)



    例子1:

    count=0
    f = open("test")
    for line in f.readlines():
        if count==3:
            line="".join([line.strip(),"岳飞"])            #''.join(a,b)
        print(line.strip())
        count+=1
    f.close()

    例子2:
    import sys
    for i in range(100):
        sys.stdout.write("#")
        sys.stdout.flush()
        import time
        time.sleep(0.5)


    例子3:
    while 1:
        l=[]
        m = input('pls input:').strip()
        flag = False
        with open("less") as f:
            for i in f:
                if i.startswith("backend") and m in i:     #startswith()
                    flag = True
                    continue
                if i.startswith("backend") and flag:
                    break
                if flag:
                    l.append(i.strip())
            for i in l:
                print(i)

    **********************************************************************************************************************************






                                                编码:


    可变类型数据:列表,字典;
    不可变数据类型:整形;元组,字符串;


    算术,赋值,比较,逻辑运算符; 关系运算in ,not in

    *****************************************************************

    pycharm右下角保存编码方式 ;那么pychon解释器就需要按照这种方式去解码;
    utf8当然不需要解码方式;pychon3默认解码方式及编码方式为utf8,
    pychon2需要申明解码方式:encoding=utf8 pychon2编码方式为ascii


    ******************************************************************
    抛开执行执行程序,请问大家,文本编辑器大家都是用过吧,如果不懂是什么,那么word总用过吧,ok,当我们在word上编辑文字的时候,不管是中文还是英文,计算机都是不认识的,那么在保存之前数据是通过什么形式存在内存的呢?yes,就是unicode数据,为什么要存unicode数据,这是因为它的名字最屌:万国码!解释起来就是无论英文,中文,日文,拉丁文,世界上的任何字符它都有唯一编码对应,所以兼容性是最好的。

    好,那当我们保存了存到磁盘上的数据又是什么呢?

    答案是通过某种编码方式编码的bytes字节串。比如utf8---一种可变长编码,很好的节省了空间;当然还有历史产物的gbk编码等等。于是,在我们的文本编辑器软件都有默认的保存文件的编码方式,比如utf8,比如gbk。当我们点击保存的时候,这些编辑软件已经"默默地"帮我们做了编码工作。

    那当我们再打开这个文件时,软件又默默地给我们做了解码的工作,将数据再解码成unicode,然后就可以呈现明文给用户了!所以,unicode是离用户更近的数据,bytes是离计算机更近的数据。


    *******************************************************************
    python3下:默认编码是;
    字符串类型 :
     str(类型) : unicode(数据)
     bytes(类型): bytes(数据)

    s="中文"  ---数据类型:str ,
    s2=b"hello"

    print(type(s))                               str
    print(type(s.encode("GBK")))                 bytes

    print(type(s2))                                 bytes
     print(type(s2.decode("utf8")))                 str

    bytes传输用的;unicode文本显示用的;  字节跟字符方式处理一样;

    ________________________________________________________________
    *******************************************************************


    --------------------------------------------------------------
    encoding=utf8

    s="中文"
    s2=u"李杰"
    print type(s.decode("utf8"))     字符串s的类型:unicode
    print type(s2.encode("utf8"))     字符串S2的类型:string


    --------------------------------------------------------------------------------
    ASCII 127 7个比特位  美国;
    扩展 ASCII 256个数字:8个位 拉丁;
    中文扩展ascii码 gb2312 几千个状态,中国
    中文扩展ASCII码 gbk   3.5万个状态; 中国;

    unicode:2个字节; 16位 六万多个状态;---全世界状态;
    utf-8: 1-3个字节;

    软件内容存到内存的是unicode.
    存到硬盘:utf-8 (unicode >> utf-8)
    unicode(明文对应数字)
    utf-8(二进制,对应二进制;)
    ________________________________________________________________---
    *******************************************************************
    python2下:
     字符串
    1、str(类型):        bytes (字节数据)  
    2、unicode(类型):     unicode编码后的二进制数据;

    s="袁浩"
    s2=u"李杰"
    print repr(s)         'xe8x8bx91xe6x98x8a'    utf-8编码;字节数据;
    print repr(s2)           u'u674eu6770'              unicode编码;

                unicode
        |            |
        uftf        gbk
        |            |
        字节数据        字节数据


    ________________________________________________________________
    *******************************************************************






    jk3000 >>> decode(解码)--unicode >>> encode(编码)--->GBK

    big5

    utf-8


    # -*- coding:utf-8 -*-
    name = "中文"
    print name
    # python2默认编码是ASCii,
    print [name.decode("utf-8")]
    [u'u4e2du6587']      unicode


    ______________________________________________________________________________________
    ______________________________________________________________________________________




                                            字符串:


    昨夜寒蛩不住鸣。
    惊回千里梦,已三更。
    起来独自绕阶行。
    人悄悄,帘外月胧明。
    白首为功名,旧山松竹老,阻归程。
    欲将心事付瑶琴。
    知音少,弦断有谁听。
    count=0
    f = open("test")
    for line in f.readlines():
        if count==3:
            line="".join([line.strip(),"岳飞"])
        print(line.strip())
        count+=1
    f.close()



    name2 =" my name is {0}, i am {1} years old"
    print(name2.index("is"))  >>>9      #找字母下标;
    print('10.1',isdecimal())            #是否是正整数;
    print('aA'.isalpha())                #是否是字母;
    print('a'.isidentifier())            #关键字;能不能定义为变量;
     print('A'.islower())                #是否是小写;
     print('A'.isupper())                #是否是大写;
    print('123.3'.isnumeric())            #是否是数字;不是小数;
    print(name2.lstrip())                #脱左空格;或者('') ''内的内容;'my' 换行符号;
    print(name2.swapcase())                #大小写互换;
    print(name2.translate(self,table))

    print(name2.replace('name','NAME')) #替换;
    >>> name=name.replace('my','My')
    >>> name
    ' My name is {0}, i am {1} years old'



    print(name2.join())
    print('||||'.join(['a','b','c']))  #把列表拼成字符层,中间用'|||'内容隔开;
    >>>a|||b|||c

    print(name2.ljust(50,'-'))            #左对齐,不够的用‘’内的-补齐;
    my name is {name},i am {age} years old~~~~~~~~~~~~
    print(name2.rjust(50,'-'))            #右对齐;
    print(name2.lower())                #大写变小写;


    name="alex"

    print(name.capitalize())                #首字母大写
    print(name.casefold())                    #大写变小写;  
    print(name.center(50,'-'))
    print(name.count('e'))   
    print(name.count('e'),3,7)               从3开始,7位结尾内统计e的个数
    print(name.endswith("LI"))                 以“”结尾,判断;.startswith("backend") 开头

    name="Alex eee li"                
    print(name.expandtabs(3))          >>>Alex   eee Li     设置TAB健的长度;

    print(name.find("e")) print(name.find("e",3)) >>>找到"e"的索引位置; 找不到返回-1;
    print(name2.rfind(''))

    ********************************************************************



    传如下标对应的实参;
    格式化 1 :    name="my name is {0},i am {1} years old"
                print(name.format("alex",22))

    传入 变量对应的字典 ,变量对应的关键字参数;
    格式化 2 :     name2="my name is {name},i am {age} years old"
                print(name2.format(name="alex",age=22)) 或者:
                print(name2.format_map({'name':'alex','age':22}))


    ______________________________________________________________________________________
    a=('a','b')
    b=list(a)     #元组变成列表list()
    a=tuple(b)      #列表变成元组;
    ______________________________________________________________________________________

    python没有二进制类型,但可以存储二进制类型的数据,就是用string字符串类型来存储二进制数据


                                    Python -- 两个列表的差集、并集和交集



        if __name__ == '__main__':  
            a_list = [{'a' : 1}, {'b' : 2}, {'c' : 3}, {'d' : 4}, {'e' : 5}]  
            b_list = [{'a' : 1}, {'b' : 2}]  
            ret_list = [item for item in a_list if item not in b_list] + [item for item in b_list if item not in a_list]  
            print(ret_list)  
       **********************************************
        if __name__ == '__main__':  
            a_list = [1, 2, 3, 4, 5]  
            b_list = [1, 4, 5]  
            ret_list = list(set(a_list)^set(b_list))     #列表差集
            print(ret_list)  

    ret_list = list(set(a_list).union(set(b_list)))       #列表并集

    ret_list = list((set(a_list).union(set(b_list)))^(set(a_list)^set(b_list)))  #列表交集



    ______________________________________________________________________________________
                                            



                                                集合操作



    #集合 set 2个功能: 1、关系测试;2、去重;  

    set操作的是一个序列;
    set是可变数据类型;
    set集合内的元素一定三不可变数据类型;


    s= set([1,3,"hello"])                    #列表设置集合;
    s2 = {1,2,3}
    print(s)
    print(type(s2))
    >>> <class 'set'>
        {1,2,3}



    linux={'a','b','c','d','e','a','alex'}
    python={'sb','alex','mack','rachel','a1'}

    print(linux.intersection(python))      交集
    print(linux & python)

    print(linux.difference(python))         差集
    print(linux - python)
    print(python - linux)

    print(linux.union(python))              求并集,linux内容不改变;天然去重;
    print(linux | python)

    print(linux.symmetric_difference(python)) #对称差集,互相不在的打印;
    print(linux ^ python)

    linux.update(python)                      合并集合但是会改动linux内容
    linux.add("alex")
    linux.copy()
    linux.difference_update(python)         差集取出存入linux (不常用)
    $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

    linux.discard()                         删除; 等同 remove pop() 随机删除;
    linux.add("a")                            增加;
    linux.issubset()                         子集;判断linux是不是谁的子集;

    _________________________

    ___________________________________________________________________
            




                                        三元表达式:


    a=3
    b=5
    c = a if a < b else b

    oct(9) oct八进制函数;


    ==========================================================================================

    info={}
    info = info.fromkeys([1,2,3],'key')
    print(info)
    ----------------------------------------------------------------------------------
    SQL中CONVERT函数格式:

    CONVERT(data_type,expression[,style])
    参数说明:

    expression

    是任何有效的 Microsoft® SQL Server™ 表达式。。

    data_type

    目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。

    ________________________________________________________________________________




                                                    列表,浅COPY



    name = [1,2,3,4,['alex','rain']]                      #值存在多块内存空间;
    n2 = name.copy()
    >>> print (n2)
    [1, 2, 3, 4, ['alex', 'rain']]
    >>> name[4][0]="ALEX LI"
    >>> print(name)
    [1, 6, 3, 4, ['ALEX LI', 'rain']]
    >>> print(n2)
    [1, 2, 3, 4, ['ALEX LI', 'rain']]




    -------------------------------------------------------------------------------

                                                    bool运算:
    >>>bool([])
    >>>False
        一下情况都为False
        []
        {}
        ()
        ''
        0

    >>>bool([1])
    >>>True

    type(1) is int
    >>>True
    type('1') is int
    >>>type([])
    >>><class 'list'>

    %s string
    %d digit
    %f float

                                                    格式化输出:



    name=input("name")
    age=input("age")
    job=input("job")
    salary=input("salary")

    info='''
    ----------------info of %s--------------------
    NAME:   %s
    AGE:    %s
    JOB:    %s
    SALARY: %s
    -------------------end------------------------
    '''%(name,name,age,job,salary)

    print(info)

    ####################################################################################################################################



                                            字典:




    stu = {1: {'name': 'n11', 'add': 'ch1'}, 2: {'name': 'n2', 'add': 'ch2'}, 3: {'name': 'n3', 'add': 'ch3'}, 4: ['rain', 28]}
    >>> stu[4].append(28)                         字典嵌套数组,可以append()
    stu[5] = {'name':'zj','add':'ch5'}            增加key=5 的值 ;
    stu[5] = {'name':'zj','add':'ch5','age':23}   #改变key=5 的值;重新赋值;
    stu.pop(key)>>> stu.pop(5)                     #删除指定的key的值;
    del stu[4]                                     #删除指定的key;
    print(key in 字典)    >>> print(5 in stu)       有这个key就返回True

      字段循环:for i ,k in stu.items():print(i,k)   #效率很低
      for i in stu:print(i,stu[i])                 #首选;打印key+values
    print(stu.values())                             打印values.

    stu.update()   names ={113:['rain'],118:['rains']}   #2个字典合并;
    stu.update(names)



                                                    字典函数  处理1:get()----查操作

    d = {1:'b',2:'a'}
    print(d[2])
    v=d.get('a',None)          #get("键值",值2)   ,  如果有键值存在就get该键内的value ,如果没有,None给v赋值;  
    print(v)

                                                    if 的出错处理:(None赋值情况下;)
    if not v:
        pass

    #遍历:  for i in seq:         #seq 可以是字典,列表,元组,字典;
    for i in range(1,101):
    for i,v in enumerate(d):print(i,v)
    for i,v in enumerate(d,1):print(i,v)  从1开始;

    # 增加; 上面有,






    **********************************************************************************************************************************************
     


                                            字符串:



    字符串拼接:                              join() 方法
     print("*".join(["I","am","world"]))


    Substring(name_0,0,CHARINDEX('寄库',name_0))

     substring(字符串,开始位置,长度)

    CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置。CHARINDEX函数调用方法如下:
           CHARINDEX ( expression1 , expression2 [ , start_location ] )
           Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expression2中找expression1的位置。
           CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如CHARINDEX没有找到要找的字符串,那么函数整数“0”。让我们看看下面的函数命令执行的结果:
          CHARINDEX(’SQL’, ’Microsoft SQL Server’)
          这个函数命令将返回在“Microsoft SQL Server”中“SQL”的起始位置,在这个例子中,CHARINDEX函数将返回“S”在“Microsoft SQL Server”中的位置11。
    *********************************************************************************************************************************************************
    import getpass

    username = input("username:")
    password = getpass.getpass("password:")
    print (username,password)

    name = "alex" 引号,代表字符串;
    print(type(name)) <class 'str'>
    input 接收的是字符串;
    22
    str(22) '22'
    依赖关系未满足安装使用办法:
     sudo apt --fix-broken install

    字符编码
    数据类型;
    for  ..else
    ascII 码(512 256 128 64 32 16 8 4 2 1)----unicode 万国码;bit=1Byte=一个字节;
    1024KB=1MB=100万字符
    每个字符占8位;
    unicode 4个字节;
    utf-8 = 8bits 可变长编码
    英文一个字节;中文3个字节;
    欧洲2个字节;
    '''
    多行内容
    '''
    '''内容不能执行,但是可以被打印; '''内容'''  变成字符串了;

    但引号''和"" 没有任何区别;适用于单行;
    name = "    Alex Li;Rain wang;Jack john     "
    4个空格(tab健)
    换行
    print(name.strip())

    name.strip() #把字符串前后去掉空格;(以及 )
    name.split() #把字符串按空格分割成列表;
    name.split(";")#把字符串按;分割成列表;
    len(name)#计算字符串长度;

    a='50;201;202;2021;203;204;205;2051;206;209;2091;211;281;282;283;284;288;285;286;511;513;289;515;517;290;2061;2062;2063;2064;2065;207;212;214'
    j=0
    b=a.split(";")
    print(a)
    print(type(b))
    for i in b:
        j +=1
    print(j)
    >>>33

    ******************************************************************


                                                    列表:



    names=['alex']
    names2=["Jack","rain"]
    names.clear()
    names.extend(names2) #扩展
    names.reverse() #反转;
    names.sort() #names里面的元素类型必须相同; names.sort(reverse=True) 反转调;
    >>> print(sorted([1,22,12]))              #sorted()
    [1, 12, 22]
    >>>

    [1,2,333,4].reverse()

    ord("a") asc码值
    *********************************************************************************

    b_list.index("wuxiao")                  #查找元素的索引(下标);

    b_list.count("wuxiao")                  #统计wuxiao有几个;

    b_list.append("wuxiao")                 #增加一个(到最后位置);
                                            增加多个方法:.extend()
    b_list.extend([7,8])

    b_list[b_list.index('liuxiao')]='徐雨'   #改,根据index更改元素

    b_list.insert(4,'chentao')              #在特定位置插入;

    b_list.pop(3)                           #删除指定index值;返回被删除的值;
      eg. >>> b_list.index('wuxiao')
          3
          >>> b_list.pop(3)
          'wuxiao'
    del b_list[1]                               #删除下标对应的元素;
    b_list.remove('zhouxiao')                #默认删除'zhouxiao' 列表里面第一个出现的元素;
    b_list = []                               #推荐赋空值;

    ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
    切片法则:顾头不顾尾 a = ['a','b','c','d','e']
    a[0] = 'a'
    a[1:] = ['b','c','d','e']
    a[-1] = 'e'
    a[-3:] = ['c','d','e']
    a[-3] = 'c'
    a[:-1] = ['a','b','c','d']
    a[0::2] = ['a','c','e'] #2跳过一个取值;步长=2
    a[0::3] = ['a','d'] #跳过2个取值;步长=3
    #####################################################################
    b="zhouxiao,zhangxiao,feixiao,wuxiao,liuxiao,fenxiao,waixiao"
    b_list=b.split(",")
    >>>b_list
    ['zhouxiao', 'zhangxiao', 'feixiao', 'wuxiao', 'liuxiao', 'fenxiao', 'waixiao'
    ]
    >>>print(len(b_list))
    7
    >>>print(b_list.index("wuxiao"))
    3
    >>>b_list[3]
    'wuxiao'
    #####################################################################


                                                循环:




    for i in range(10):
      if i <=5:
        print(i)
      else:
        #break              有break跳出本层循环;
        print("------")
    ***********************************

        for i in range(10):
          if i > 5:
            print(i)
          else:
            continue        跳出本次循环;print没有执行;
            print("------")
    ############################################
    for i in range(10):
      print(i)
      if i==5:
      break
    else:                      for 循环 带else 结束;
      print("done")           #当for 循环正常结束else被执行;否则else不执行;
    ###################################################
    count = 0
    while count <100:
      print("...",count)
      count +=1
      if count ==50:
        break
    else:
      print("done..")            #while 也可以有else语句,正常执行完可执行else
      ###################################################
      list2=(3,)                 必须有逗号;元组类型;
      if salary.isdigit():        如果输入的是0-9字符串类型的数字;(它是数字,只不过是字符串形式)那么认为是真!然后转int类型;
        salary = int(salary)
        while True:
          for index,item in enumerate(product_list):
          print(index,item)

    ***************************************************************
    a=[['a',500],['b',50],['c',600]]
    >>> for i in enumerate(a):print(i)

    ...
    (0, ['a', 500])
    (1, ['b', 50])
    (2, ['c', 600])
    ######################################################################
    格式化字符串时,Python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的格式。Python用一个tuple将多个值传递给模板,每个值对应一个格式符。

    比如下面的例子:

    print("I'm %s. I'm %d year old" % ('Vamei', 99))
    ***********************************************************************

    一次性跳出多层循环; (方法一:)

    break_flag = False

    for i in range(5):
        print("爷爷层:",i)
        for i in range(5):
            if i == 3:
                break_flag = True
                break
            for i in range(10):
                print("孙子层",i)
                if i == 3:
                    break_flag = True
                    break
            if break_flag:
                break
        if break_flag:
            print("all die")
            break
    ***************************************************************************
    (方法二:)

    break_flag = False
    count = 0
    while break_flag == False:
        print("grandfather level")
        while break_flag == False:
            print("father level")
            while break_flag == False:
                print("son level")
                count +=1
                if count >3:
                    break_flag = True

    print("go ~~~~~~~~~~~~~~~~~")

  • 相关阅读:
    [Other] 应用下载网站的APK/IPA等常见MIME设置
    [AIR] StageWebView可以和js通信
    [JavaScript] 判断设备类型,加载相应css
    [HTML] H5在webApp中的注意事项
    [JavaScript] css将footer置于页面最底部
    python 装饰器
    python while...else和for...else语法
    Linux haproxy配置参数
    Linux haproxy基础
    Linux ospf+lvs
  • 原文地址:https://www.cnblogs.com/santizhou/p/7472070.html
Copyright © 2020-2023  润新知