一、字典

字典的特性:

  • dict是无序的
  • key必须是唯一的,自动去重
dic={
    'name':'yolanda',
    'age':18,
    'job':'engineer'
}
#其他写法
dic=dict({'name':'yolanda','age':18})
dic=dict((('name','yolanda'),('age',18),))
#添加
dic['hobbies'] = 'learn'
#修改
dic['age']=20
#输出
print(dic['name'])
print(dic.get('name')) #找不到不会报错,会返回none
#清空
dic.clear()
#快速生成一个字典
dic=dic.fromkeys('abc',1)
dic=dic.fromkeys(['a','b'],1)
#注意:修改一个values后key值后面的values都会改变
data=dict.fromkeys([1,2,3],{'name':'yolanda','age':18})
data[1]['name']='jack'
print(data)
#条目
print(dic.items())
for k,v in dic.items():
    print(k,v)
#另一种循环:
for k in dic:
print(k,dic[k])
#取出key值 print(dic.keys()) #取出values print(dic.values()) #删除 #dic.pop('name') dic.popitem() #随机删除一个 #增加 dic.setdefault('gender',[]).append('famale') #更新,如果存在则替换 dic1={'name':'jack'} dic.update(dic1) dic.update(name='tom') #复制 dic={'food':['beef','bread','egg']} dic2=dic.copy() dic2['food'][1]='apple' #此时是浅复制,修改一个字典列表里的value,另一个字典也会改变 #深复制 import copy dic3=copy.deepcopy(dic)

简单的列子:

打印一个三级菜单

menu = {
    '北京':{
        '海淀':{
            '五道口':{
                'soho':{},
                '网易':{},
                'google':{}
            },
            '中关村':{
                '爱奇艺':{},
                '汽车之家':{},
                'youku':{},
            },
            '上地':{
                '百度':{},
            },
        },
        '昌平':{
            '沙河':{
                '老男孩':{},
                '北航':{},
            },
            '天通苑':{},
            '回龙观':{},
        },
        '朝阳':{},
        '东城':{},
    },
    '上海':{
        '闵行':{
            "人民广场":{
                '炸鸡店':{}
            }
        },
        '闸北':{
            '火车战':{
                '携程':{}
            }
        },
        '浦东':{},
    },
    '山东':{},
}
current_level = menu
last_level = []
while True:
    for key in current_level:
        print(key)
    chooice = input('>>:').strip()
    if len(chooice) == 0:continue
    if chooice == 'q':exit()
    if chooice == 'b':
        if not last_level:break
        current_level = last_level[-1]
        last_level.pop()
    if chooice not in current_level:continue
    last_level.append(current_level)
    current_level=current_level[chooice]
三级菜单

二、集合

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

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系

 

s1={1,2,3,4,5}
s2={3,4,6,7}
s3={3,4}
#其他定义方式
s4=set('hello')
print(s4)
#结果:{'o', 'l', 'e', 'h'}
#并集
print(s1&s2)
print(s1.intersection(s2))
s1.intersection_update(s2) #s1=s1&s2
#结果:{3, 4}
#交集
print(s1|s2)
print(s1.union(s2))
#结果:{1, 2, 3, 4, 5, 6, 7}
#差集
print(s1-s2)
print(s1.difference(s2))
s1.difference_update(s2) #s1=s1-s2
#结果:{1, 2, 5}
#对称差集
print(s1^s2)
print(s1.symmetric_difference(s2))
s1.symmetric_difference_update(s2) #s1=s1^s2
#结果:{1, 2, 5, 6, 7}
#子集
print(s2<=s1)
print(s3<=s1)
print(s2.issubset(s1))
print(s3.issubset(s1))
#结果:False;True;False;True
#父集
print(s1>=s2)
print(s1>=s3)
print(s1.issuperset(s2))
print(s3.issuperset(s3))
#结果:False;True;False;True

#添加
s1.update('ho')
print(s1)
s1.update(s2)
print(s1)
#结果:update会把'ho'拆开
#      {1, 2, 3, 4, 5, 'o', 'h'}
#      {1, 2, 3, 4, 5, 'h', 6, 7, '0'}
s1.add('hello')
print(s1)
#结果:add不会拆开字符串
#{1, 2, 3, 4, 5, 'o', 6, 7, 'hello', 'h'}

#随机删除
s1.pop()
#指定删除
s1.remove(1)
#如果指定删除的内容不存在则返回错误
s1.discard('t')
print(s1)
#此时不返回错误

三、文件操作

基本操作:

f = open('file') #打开文件
open('file',encoding='utf-8')   #字符编码
open('file','r') #指定打开方式
first_line = f.readline() 
print('first line:',first_line) #读一行

print('我是分隔线'.center(50,'-'))
data
= f.read()# 读取剩下的所有内容,文件大时不要用

print(data) #打印文件
f.close()
#关闭文件

打开文件的模式有:

  • r,只读模式(默认)。
  • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
  • a,追加模式。【可读;   不存在则创建;存在则只追加内容;】

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

  • r+,可读写文件。【可读;可写;可追加】
  • w+,写读
  • a+,同a

"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

  • rU
  • r+U

"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

  • rb
  • wb
  • ab

例:类似于sed的小程序

import sys
old=sys.argv[1]
new=sys.argv[2]
file=open(sys.argv[3],'r',encoding='utf-8')
file_new=open(sys.argv[3],'r+',encoding='utf-8')
for line in file:
    if old in line:
        line=line.replace(old,new)
    file_new.write(line)
file.close()
file_new.close()
sed.py