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