• Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数


    1.        集合

    1.1      特性

    集合是一个无序的,不重复的数据组合,主要作用如下:

    • 去重,把一个列表变成集合实现自动去重。
    • set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作。

    1.2     常用操作:

    s = set([3,5,9,10])     

    # 创建一个数值集合 

    t = set("Hello")       

    # 创建一个唯一字符的集合 

    a = t | s         

    # 求 t 和 s 的并集 

    b = t & s         

    # 求 t 和 s 的交集 

    c = t – s         

    # 求差集(项在 t 中,但不在 s 中) 

    d = t ^ s          

    # 求对称差集(项在 t 或 s 中,但不同时出现在二者中) 

     

     

    1.3      基本操作:

    t.add('x')           

    # 添加一项 

    s.update([10,37,42]) 

    # 在 s 中添加多项 

    t.remove('H') 

    # 删除一项

    len(s)

    #  s e t 的长度

    x in s 

    # 测试 x 是否是 s 的成员 

    x not in s 

    # 测试 x 是否不是 s 的成员 

    s.issubset(t) 

    s <= t 

    # 测试是否 s 中的每一个元素都在 t 中 

    s.issuperset(t) 

    s >= t 

    # 测试是否 t 中的每一个元素都在 s 中  

    s.union(t) 

    s | t 

    # 返回一个新的 set 包含 s 和 t 中的每一个元素 

    s.intersection(t) 

    s & t 

    # 返回一个新的 set 包含 s 和 t 中的公共元素 

    s.difference(t) 

    s - t 

    # 返回一个新的 set 包含 s 中有但是 t 中没有的元素 

    s.symmetric_difference(t) 

    s ^ t 

    # 返回一个新的 set 包含 s 和 t 中不重复的元素  

    s.copy() 

    # 返回 set “s”的一个浅复制

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    2.       文件操作

    2.1     文件操作流程

           

    示例文件:

    root:x:0:0:root:/root:/bin/bash
    
    bin:x:1:1:bin:/bin:/sbin/nologin
    
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    
    sync:x:5:0:sync:/sbin:/bin/sync
    
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    
    halt:x:7:0:halt:/sbin:/sbin/halt
    
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    
    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    
    operator:x:11:0:operator:/root:/sbin/nologin
    
    games:x:12:100:games:/usr/games:/sbin/nologin
    
    gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
    
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    
    nobody:x:99:99:Nobody:/:/sbin/nologin
    
    dbus:x:81:81:System message bus:/:/sbin/nologin
    View Code

    2.2     基本操作

    f = open('file.txt') 

    # 打开文件

    first_line = f.readline()

     

    print('first line:',first_line)

    # 读一行

    print('我是分隔线'.center(50,'-'))

     

    data = f.read()

    # 读取剩下的所有内容,文件大时不要用

    print(data) 

    # 打印文件

    f.close() 

    # 关闭文件

     

     

     

     

     

     

     

     

     

     

     

    2.3    打开文件的模式

    • r,只读模式(默认)。

    • w,只写模式。【不可读;不存在则创建;存在则删除内容;】

    • a,追加模式。【可读;不存在则创建;存在则只追加内容;】

        "+" 表示可以同时读写某个文件

        > r+,可读写文件。【可读;可写;可追加】

        > w+,写读

        > a+,同a

        "b" 表示处理二进制文件

        > rb

        > wb

        > ab

    2.4     with语句

    为了避免打开文件后忘记关闭,可以通过管理上下文,即:

    1

    2

    3

    with open('log','r') as f:

         

        ...

     

     

     

     

    3.      字符编码与转码

    3.1    字符编码方式

    3.1.1  ASCII编码

    ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

    3.1.2   Unicode编码

    Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,所有的字符和符号最少(可能更多)由 16 位来表示(2个字节),即:2 **16 = 65536,这里还有个问题:字节数增加后使用空间会直接翻倍举例还说:同样是ABCD这些字符存储一篇相同的文章,使用ASCII码如果是1M的话,那么Unicode存储至少2M可能还会更多。

    3.1.3   UTF-8编码

    是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存... 通过这种可扩展的方式来存储。

     

    在2.x版本的Python中,解释.py文件的时候,默认是给他一个编码的就是ASCII码,如果在2.x版本中不指定编码并且在.py文件中写了一个ASCII码中没有的字符就会显示乱码,不过这个问题在Python3中就不存在了,因为在Python3中默认就是Unicode编码

    3.2     Python编码转化

    3.2.1   Python3中的编码转换

    #在Python3中默认就是unicode编码

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    name = '小岳岳'
    #转为UTF-8编码
    print(name.encode('UTF-8'))
    #转为GBK编码
    print(name.encode('GBK'))
    #转为ASCII编码(报错为什么?因为ASCII码表中没有‘小岳岳’这个字符集~~)
    print(name.encode('ASCII'))
    View Code

     

    3.2.2   Pyton2.x中的编码转换

    #因为在python2.x中默认是ASCII编码,你在文件中指定编码为UTF-8,但是UTF-8如果你想转GBK的话是不能直接转的,需要Unicode做一个转接站点。

             

    GBK转换为UTF-8格式流程:

    > 首先通过解码(decode)转换为Unicode编码

    > 然后通过编码(encode)转换为UTF-8编码

    UTF-8转换为GBK格式流程:

    > 首先通过解码(decode)转换为Unicode编码

    > 然后通过编码(encode)转换为GBK编码

     

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
     
    import chardet
    name = '小岳岳'
    print chardet.detect(name)
    #先解码为Unicode编码,然后再从Unicode编码为GBK
    new_name = name.decode('UTF-8').encode('GBK')
    print chardet.detect(new_name)
    View Code

     

    4.      函数

    4.1    基本语法

    函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。

    特性:

    • 减少重复代码
    • 使程序变的可扩展
    • 使程序变得易维护

    语法:

    def function_name():#函数名

        print("Hello, World!")

     

    function_name() #调用函数

    可以带参数:

    def calc(x,y):

        res = x**y

        return res #返回函数执行结果

     

    c = calc(a,b) #结果赋值给c变量

    print(c)

    4.2      函数参数与变量

    4.2.1   函数参数

    形参是在函数被调用时才分配内存单元,调用结束时立即释放所分配的内存单元,so,形参只在函数内部有效。

    实参可以是常量、变量、表达式、函数等,实参在进行函数调用时必须有确,以便把这些值传给形参。故应预先用赋值,输入等办法使参数获得确定值。

           上述函数中x,y是形参,a,b是实参。

    默认参数

    Def stu_register(name,age,country=”CN”):

    这样,country参数在调用时不指定就是默认参数CN,指定了的话就是你指定的值。默认参数必须放在未指定默认值的后面。

    关键参数

    若给函数传参是不想按顺序的话可以指定关键字参数,只需指定参数名即可,但是,关键参数必须放在位置参数之后。

           语法:

                  Stu_register(age=22,name=”poker”)

    非固定参数

    若函数定义时不确定用户想出入多少个参数,可使用非固定参数

     

    Def stu_register(name,age,*args)  #args会把多传入的参数变成一个元组形式

           Print(name,age,args)

    Stu_register(“poker”,22)

    #输出

    Poker 22 ()  #后面这个空元组就是args,因为没传参所以空


     

    Stu_register(“Tom”,28,”CN”,”Python”)

    #输出

    Tom 28 (‘CN’,’Python’)


     

    还有一个**kwargs

    Def stu_register(name,age,*args,**kwargs): #kwargs会把多传入的参数变成一个字典形式

           Print(name,age,kwargs)

    Stu_register(‘poker’,22)

    #输出

    #poker 22 () {} #后面这个{}就是kwargs,因为没传值,所以为空


     

    Stu_register(“Tom”,28,”CN”,”Python”,sex=”Male”,school=”Qinghua”)

    #输出

    #Tom 28 (‘CN’,’Python’) {‘school’:’Qinghua’,’sex’:’Male’}

    4.2.2   全局与局部变量

    在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。

    全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

    当全局变量与局部变量同名时,在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

    返回值

    Return语句可以返回函数的返回值

    > 函数执行时遇到return就会停止执行并返回结果,也代表着函数的结束

    > 未指定return,函数返回None

    递归

    函数内部可以调用其他函数,若函数内部调用自身,该函数为递归函数。

    def calc(n):
    
        print(n)
    
        if int(n/2) ==0:
    
            return n
    
        return calc(int(n/2))
    
     
    
    calc(10)
    View Code

    输出:

    10

    5

    2

    1

    递归特性:

    > 需明确结束条件

    > 进入更深一层递归时,规模要比上次有所减少

    > 递归效率不高,递归层次过多会导致栈溢出

    高阶函数

    变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

    1

    2

    3

    4

    5

    6

    def add(x,y,f):

        return f(x) + f(y)

     

     

    res = add(3,-6,abs)

    print(res)

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Win10创意者更新秋季版激活秘籍
    将刷了Android的Lumia恢复为WP系统
    给Lumia 520/521/525/526/720刷Android系统
    DNS解析
    遍历对象目录
    PE注入
    利用NtCreateThreadEx注入
    利用CreateRemoteThread注入
    APC注入
    SetWindowHookEx()注入
  • 原文地址:https://www.cnblogs.com/zhoujunlong/p/5761019.html
Copyright © 2020-2023  润新知