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") 换路径

原文地址:https://www.cnblogs.com/mrwang1101/p/5993870.html