• Python Day03


    Python Day03

    python 字典

    Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。

    定义字典:

    字典的每个键与值使用冒号:隔开,每队用逗号分割,整体放在{}中;

    字典的键必须是唯一的,但是值可以是重复的;

    值可以取任何数据类型,但是必须是不可变的,如字符串,数字或者元组;

    字典方法

    get方法

    name_dic = {"name":"wangzhigang","age":25,"gender":"man"}
    for key in name_dic:
        print(key,name_dic.get(key))    #打印字典name_dic的key;key对应的values
    
    #get    name_dic["name"]   == name_dic.get("name")    指定key,取出对应的values;
    
    dict.get(key)   ==  dict[key]
    
    #执行结果:
    gender man
    age 25
    name wangzhigang

    items方法

    name_dic = {"name":"wangzhigang","age":25,"gender":"man"}
    print("values: %s" % name_dic.items())
    
    #items    一列表的形式可遍历的(键值)元组数组
    
    #执行结果:
    values: dict_items([('age', 25), ('name', 'wangzhigang'), ('gender', 'man')])

    keys方法

    name_dic = {"name":"wangzhigang","age":25,"gender":"man"}
    print(name_dic.keys())
    
    #keys   以列表的形式返回字典的keys;
    
    #执行结果:
    dict_keys(['name', 'gender', 'age'])

    pop方法

    name_dic = {"name":"wangzhigang","age":25,"gender":"man"}
    name_dic.pop("name")
    print(name_dic)
    
    #pop   指定key删除字典的键值对
    
    #执行结果:
    {'gender': 'man', 'age': 25}

    popitem方法

    name_dic = {"name":"wangzhigang","age":25,"gender":"man"}
    name_dic.popitem()
    print(name_dic)
    
    #popitem   随机删除字典中的键值对
    
    #执行结果:
    {'gender': 'man', 'age': 25}
    或者
    {'age': 25, 'name': 'wangzhigang'}
    或者
    {'name': 'wangzhigang', 'gender': 'man'}

    setdefault方法

    name_dic = {"name":"wangzhigang","age":25,"gender":"man"}
    print(name_dic.setdefault("company","Lifec"))
    print(name_dic)
    
    #setdefault    和get()方法类似,如果键不存在于字典中,将会添加键并将值设置为默认值,默认为None。
    
    #执行结果
    Lifec
    {'name': 'wangzhigang', 'gender': 'man', 'company': 'Lifec', 'age': 25}

    update 方法

    name_dic = {"name":"wangzhigang","age":25,"gender":"man"}
    name_dic2 = {"cpmpany":"Lifec"}
    print(name_dic)
    name_dic.update(name_dic2)     #update   将字典2中的键/值更新到字典1中;
    print(name_dic)
    
    
    #执行结果:
    {'name': 'wangzhigang', 'age': 25, 'gender': 'man'}
    {'cpmpany': 'Lifec', 'name': 'wangzhigang', 'age': 25, 'gender': 'man'}

    values方法

    name_dic = {"name":"wangzhigang","age":25,"gender":"man"}
    print(name_dic.values())
    
    #values   取出字典中的所有的值
    
    #执行结果:
    dict_values(['man', 'wangzhigang', 25])

    三级菜单

    menu = {
        '北京':{
            '海淀':{
                '五道口':{
                    'soho':{},
                    '网易':{},
                    'google':{}
                },
                '中关村':{
                    '爱奇艺':{},
                    '汽车之家':{},
                    'youku':{},
                },
                '上地':{
                    '百度':{},
                },
            },
            '昌平':{
                '沙河':{
                    '老男孩':{},
                    '北航':{},
                },
                '天通苑':{},
                '回龙观':{},
            },
            '朝阳':{},
            '东城':{},
        },
        '上海':{
            '闵行':{
                "人民广场":{
                    '炸鸡店':{}
                }
            },
            '闸北':{
                '火车战':{
                    '携程':{}
                }
            },
            '浦东':{},
        },
        '山东':{},
    }
    
    current_layer = menu                                #将字典menu定义为一个变量:当前层;
    last_layers = []                                    #将上一层定义一个空列表;
    while True:                                         #使用while循环,让用户输入;
        for key in current_layer:                       #循环字典,打印第一层;
            print(key)
        choice = input("请选择>>:")
        if len(choice) == 0:continue                    #如果用户输入为空,中断当次循环,让用户继续输入;
        if choice == "b":                               #使用if判断,如果输入"b",则退到上一层;
            if len(last_layers) == 0:break              #如果上一层last_layer为空,代表已经退到第一层,则退出程序;
            current_layer = last_layers[-1]             #输入"b"后的当前层等于last_layer列表中的最后一个元素;
            last_layers.pop()                           #将列表中最后一个元素删除;
        if choice not in current_layer:continue         #如果当前层中没有用户输入的元素,则跳出当次循环;
        last_layers.append(current_layer)               #将当前层加入到last_layer的列表中;
        current_layer = current_layer[choice]           #当前层就等于当前层[choice],输出用户选出的下一级菜单;

    元组

    定义元组

    定义符号()
    与列表完全一致,唯一不同的是元组内的元素不可变。

    元组中只包含一个元素时,需要在元素后面添加逗号来消除歧义。

    访问元组

    元组可以使用下标索引来访问元组中的值。

    tup = ("wang","zhi","gang")
    
    #执行结果
    
    wang

    修改元组

    元组中的元素是不允许修改的,但我们可以对元组进行连接组合

    tup = ("wang","zhi","gang")
    tup[0] = "Hello"
    
    #执行结果:
    
    Traceback (most recent call last):
      File "C:/Users/wangzhigang/PycharmProjects/untitled/Python/Day03/元组.py", line 5, in <module>
        tup[0] = "Hello"
    TypeError: 'tuple' object does not support item assignment      #元组不支持对其中的元组赋值,即不允许修改;

    可以对两个元组进行连接组合

    tup = ("wang","zhi","gang")
    tup1 = ("sun","mei","jun")
    tup2 = tup1 + tup
    print(tup2)
    
    #执行结果:
    
    ('sun', 'mei', 'jun', 'wang', 'zhi', 'gang')

    删除元组

    元组中的元素是不允许删除的,但是可以使用del语句来删除整个元组。

    元组运算符

    与字符串一样,元组之间可以使用+号和*号进行运算。

    集合

    集合概述

    集合(set):把不同的元素组合在一起形成的集合,是python的基本数据类型。

    集合元素(set elements):组成集合的成员。

    集合对象是一组无序排列的可哈希的值:集合成员可以做字典的值。

    集合分类:可变集合、不可变集合

    可变集合:可添加和删除元素,非可哈希的,不能用做字典的值,也不能做其他集合的元素

    不可变集合:与上面相反

    操作符与关系符:

    集合的相关操作 

    交集

    set1 = {1,2,3,4,5,6,7}
    set2 = {3,4,6}
    print(set1 & set2)   #交集     符号
    print(set1.intersection(set2))    #交集   intersection方法
    
    #执行结果:
    {3, 4, 6}

    并集

    set1 = {1,2,3,4,5,6,7}
    set2 = {3,4,6}
    print(set1|set2)     #并集
    print(set1.union(set2))   #并集   union方法
    
    #执行结果:
    
    {1, 2, 3, 4, 5, 6, 7}

    差集

    set1 = {1,2,3,4,5,6,7}
    set2 = {3,4,6}
    print(set1-set2)       #差集
    print(set1.difference(set2))  #差集   difference方法
    
    #执行结果:
    {1, 2, 5, 7}

    对称差集

    set1 = {1,2,3,4,5,6,7}
    set2 = {3,4,6}
    # print(set1^set2)       #对称差集
    print(set1.symmetric_difference(set2))   #对称差集   symmetric_difference方法
    
    #执行结果:
    {1, 2, 5, 7}

    子集

    set1 = {1,2,3,4,5,6,7}
    set2 = {3,4,6}
    
    print(set2 <= set1)     #子集
    print(set2.issubset(set1))   #子集    issubset方法   返回值为True或者False
    
    #执行结果:
    True    

    父集

    set1 = {1,2,3,4,5,6,7}
    set2 = {3,4,6}
    # print(set1 >= set2)    #父集
    print(set1.issuperset(set2))    #父集    issuperset   返回值为True或者False
    
    #执行结果:
    True

    Python文件操作

    转载自:http://www.cnblogs.com/rollenholt/archive/2012/04/23/2466179.html

    python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。

    文件操作

    得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()

    返回指定目录下的所有文件和目录名:os.listdir()

    函数用来删除一个文件:os.remove()

    删除多个目录:os.removedirs(r“c:python”)

    检验给出的路径是否是一个文件:os.path.isfile()

    检验给出的路径是否是一个目录:os.path.isdir()

    判断是否是绝对路径:os.path.isabs()

    检验给出的路径是否真地存:os.path.exists()

    返回一个路径的目录名和文件名:os.path.split() eg os.path.split('/home/swaroop/byte/code/poem.txt') 结果:('/home/swaroop/byte/code', 'poem.txt')

    分离扩展名:os.path.splitext()

    获取路径名:os.path.dirname()

    获取文件名:os.path.basename()

    运行shell命令: os.system()

    读取和设置环境变量:os.getenv() 与os.putenv()

    给出当前平台使用的行终止符:os.linesep Windows使用' ',Linux使用' '而Mac使用' '

    指示你正在使用的平台:os.name 对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'

    重命名:os.rename(old, new)

    创建多级目录:os.makedirs(r“c:python est”)

    创建单个目录:os.mkdir(“test”)

    获取文件属性:os.stat(file)

    修改文件权限与时间戳:os.chmod(file)

    终止当前进程:os.exit()

    获取文件大小:os.path.getsize(filename)

    os.mknod("test.txt")        创建空文件
    fp = open("test.txt",w)     直接打开一个文件,如果文件不存在则创建文件

    关于open 模式:

    w     以写方式打开,
    a     以追加模式打开 (从 EOF 开始, 必要时创建新文件)
    r+     以读写模式打开
    w+     以读写模式打开 (参见 w )
    a+     以读写模式打开 (参见 a )
    rb     以二进制读模式打开
    wb     以二进制写模式打开 (参见 w )
    ab     以二进制追加模式打开 (参见 a )
    rb+    以二进制读写模式打开 (参见 r+ )
    wb+    以二进制读写模式打开 (参见 w+ )
    ab+    以二进制读写模式打开 (参见 a+ )
    fp.read([size])                     #size为读取的长度,以byte为单位
    
    fp.readline([size])                 #读一行,如果定义了size,有可能返回的只是一行的一部分
    
    fp.readlines([size])                #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
    
    fp.write(str)                      #把str写到文件中,write()并不会在str后加上一个换行符
    
    fp.writelines(seq)            #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。
    
    fp.close()                        #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。  如果一个文件在关闭后还对其进行操作会产生ValueError
    
    fp.flush()                                      #把缓冲区的内容写入硬盘
    
    fp.fileno()                                      #返回一个长整型的”文件标签“
    
    fp.isatty()                                      #文件是否是一个终端设备文件(unix系统中的)
    
    fp.tell()                                         #返回文件操作标记的当前位置,以文件的开头为原点
    
    fp.next()                                       #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。
    
    fp.seek(offset[,whence])              #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
    
    fp.truncate([size])                       #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

    目录操作

    os.mkdir("file") 创建目录复制文件:
    shutil.copyfile("oldfile","newfile") oldfile和newfile都只能是文件
    shutil.copy("oldfile","newfile") oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
    复制文件夹:
    shutil.copytree("olddir","newdir") olddir和newdir都只能是目录,且newdir必须不存在
    重命名文件(目录)
    os.rename("oldname","newname") 文件或目录都是使用这条命令
    移动文件(目录)
    shutil.move("oldpos","newpos")
    删除文件
    os.remove("file")
    删除目录
    os.rmdir("dir")只能删除空目录
    shutil.rmtree("dir") 空目录、有内容的目录都可以删
    转换目录
    os.chdir("path") 换路径

  • 相关阅读:
    不同编程语言中获取现在的Unix时间戳
    Zend Studio8.0.0中文汉化教程及入门教程
    Apache+php+mysql在windows下的安装与配置图解
    SQl 跨服务器查询语句和跨数据创建表
    .NET平台依赖注入机制及IoC的设计与实现
    整理基础的CentOS常用命令
    jQuery boxy弹出层插件中文演示及讲解
    VB 冒泡排序
    Windows7下使用IIS7与FastCGI模块配置PHP5.3.1运行环境
    Eclipse快捷键大全(转载)
  • 原文地址:https://www.cnblogs.com/mrwang1101/p/5993870.html
Copyright © 2020-2023  润新知