Day2 列表,字典,集合
1.模块:
a. 模块sys ,是python解释器自带的C语言编写的模块
import sys print(sys.path) #打印环境变量 print(sys.argv) #打印相对路径,打印出来后面可以跟参数,然后根据参数选择进行相应操作。 print(sys.argv[2])
b.模块os
import os
res = os.system("dir") #os.system 只执行结果,输出结果到屏幕上,不保存结果
res2 = os.popen("dir").read() #打开目录将结果存到一个内存地址上,再读出内容
print("-----",res2)
os.mkdir("new dir") #创建新的目录
c.调用自定义的模块,在同级目录下,直接import。不同级目录下,有2种方法:
方法一:将自定义模块copy 至site-packages目录下,然后在程序中调用即可。
方法二:后续。。。。
2.pyc文件:
Python与Java一样,先编译后解释.PyCodeProject是程序执行结果,pyc文件是PyCodeProject的一种持续化保存方式。
Python 的运行过程:
- 执行hello.py
- 编译结果保存在内存中的PyCodeProject中
- Python运行结束,Python解释器将PyCodeProject写回到 .pyc文件中。
- 当Python第二次运行时,先在硬盘中寻找pyc文件,如果py有更新,先比对py 与pyc更新时间,如果py 时间晚于 pyc文件,说明该程序有更新,需重新执行上述步骤,如果py时间等于pyc时间,则该程序无修改,可直接调用pyc.
3.Python 数据类型
type(2**32) #type表示查看数据类型,**表示幂次方
- int Python 2.x有整形和长整型 (>63位),Python3.x不区分,全都是整形。
- 布尔值 真或假,1 或 0
- 字符串
4.三元运算: result = 值1 if 条件 else 值2
#条件为真返回值1 ,假则返回值2
5.bytes与字符串转换

6.列表 name = ["Dong","Xi","Nan","Bei","Zhong"]
列表操作:
- name[n,m] #切片,取n到m-1 的连续的值,顾头不顾尾
- name[-1] #切片,在不知道列表长度的情况下,取出最后一个值
- name[-2:] #切片,在不知道列表长度的情况下,取出最后两个值
- name[0:3] = name[:3] #前面的0可以忽略
- name.append("Tian") #追加到最后一个位置
- name.insert(x,"Di") #插入到位置x,不能批量插入,只能一个一个插入
- name[1]= ("Zhi") #修改
- name.remove("Dong") #删除
- del name[0] #删除
- name.pop() #默认删除最后一个值
- name.pop(1) = del name[1]
- name.index("xxx") #返回xxx在列表中的下标
- name.count("xxx") #计算xxx在列表中的个数
- name.clear() #清空列表
- name.reverse() #反转
- name.sort() #排序
- name.extend(name2) #扩展, 将name 和name2合并,name2还存在。
- name.copy() # 深浅copy
7.深浅copy
浅copy:可用来创建联合账号。
深copy
8.元组:与列表相似,不能修改,只能查找,切片,可简称为 不可变列表
eg。 name = ("Dong","Xi","Nan","Bei")
元组只有统计和获取下标两种方法。count,index.因为它一旦创建,便不能修改,所以叫只读列表。
9.字符串操作
name = "alex geng"
print(name.capitalize()) #首字母大写
print(name.count("e")) #统计个数
print(name.center(20,"-")) #-----alex geng------
print(name.endswith("s")) #判断以什么结尾
print(name[name.find("a"):4]) #字符串切片
a = "my name is {name},my hobby is {hobby}"
print(a.format(name = "sera",hobby = "play")) #格式化
print(a.format_map( {"name": "sera","hobby": "play"}))
print("aaa21".isalnum()) #判断是否是26个字母和数字
print("dong".isalpha()) #判断是否是纯英文字符
print("1A".isdecimal()) #判断是否是十进制
print("T1A".isidentifier()) #判断是否是合法标识符
print("1A".isspace()) #是否是空格
print("A Nname".istitle()) #是不是标题
print("aaa".isprintable()) #tty文件,drive file 不可打印。设备终端文件
print("*".join(["1","2","3"])) #1*2*3
print("\naaa".lstrip()) #删除左边的空格和回车
print("\n aaaaa \n".strip())# 删除两边的空格和回车
p = str.maketrans("abcdef","123456")
print("alex geng".translate(p)) #替换
print("alex".replace('e',"a")) #替换
print("alex".rfind("l")) #找到最右面值的下标
print("a b c d e".rsplit()) #以某种标志分割字符串
print("alex LI".swapcase()) #ALEX li
print("alex".title())
10.字典
a.字典的增删改查
info = {
"S1":"Dong",
'S2':'Xi',
'S3':'Nan',
'S4':'rrr',
'S5':'aaaa',
'S6':'bbbb',
'S7':'cccc',
}
print(info["S6"]) #以key值为索引查找value
print(info.get('S10')) #有值返回值,没值返回None
print("S3" in info ) #确定某值在不在字典里,在2.x中是info.has_key('S3')
info["S1"] = "SHANXI" #修改
print(info["S1"])
print(info)
info["S10"] = 'BEIJING' #创建
print(info)
del info["S2"] #删除方法一
info.pop('S2') #删除方法二
info.popitem('S2') #随机珊瑚
print(info)
b.字典多级嵌套
11.集合(set) 是一个无序的、不重复的数据组合。
1.去重 ---把一个列表编程集合,就自动去重。
2.关系测试 --测试两组数据之间的交集,差集,并集等关系。
eg.将列表变为集合:
list_1 = [1,2,3,5,5,7,8,8] list_1 = set(list_1) print(list_1,type(list_1))
集合的操作
#交集 print(list_1.intersection(list_2)) #并集 print(list_1.union(list_2)) #差集 print(list_1.difference(list_2)) print(list_2.difference(list_1)) #子集 list_3 =set([1,2]) print(list_3.issubset(list_1)) print(list_1.issuperset(list_3)) #对称差集 print(list_1.symmetric_difference(list_2))
Isdisjiont
list_4 = set([2,100]) print(list_4.isdisjoint(list_2)) # 当list_4和list 2没有关系时,则返回true
集合操作
a = t | s #并集
b = t & s #交集
c = t - s #差集
d = t ^ s #对称差集(去除双方都有的值)
t.add("xxx") #添加一项
t.update("xx","ss","aaa") #添加多项
len(s) #长度
x in a #列表,字典,集合,字符串中
list_1.remove("h") #删除指定值,如果值不存在,会报错
list_1.pop() #删除,但无法指定
list_1.discard() #删除指定值,如果值不存在,不会报错
12.文件操作
a.写
ata =open("yesterday",encoding = 'utf-8').read()
f = open("yesterday",'a',encoding= 'utf-8') #文件句柄(文件内存对象),包含文件名,内存起始位置,文件大小,字符集
#'w' 新建
#'a' = append 追加
f.write('\n我爱北京天安门.....,\n')
f.write('天安门上太阳升.....')
b.单行读取
for i in range(10):
print(f.readline())
c.多行读取
#下面这种方法low,整个文件占据内存,消耗大
for index,line in enumerate(f.readlines()):
if index ==9:
print('-------分割线-----')
continue
print(line.strip())
#下面这种方法只有每一行占据内存,效率高
count = 0
for line in f:
if count == 9:
print('---------分割线-')
count += 1
continue
print(line.strip())
count +=1
d.光标返回
print(f.tell()) #按字符来计数,返回光标所在值
f.seek(0) #将光标回到指定位置
e.flish
eg,进度条
import sys,time
for i in range(50):
sys.stdout.write('#')
sys.stdout.flush()
time.sleep(0.1)
f.
print(f.encoding) print(f.fileno()) #返回文件在内存中的编号 print(f.name) #返回文件名 print(f.isatty()) #是否是终端,eg 打印机 print(f.seekable()) #光标可返回,则为true print(f.flush()) #刷 f.colse #关闭文件 f.closed() # 判断文件是否关闭
f.truncate(10) #截断
g.文件操作
'r' 读
'w' 写,(如果本来有这个文件,直接覆盖,新建,所以要备份),
'a' 追加
'r+' 读写,可以打开读取并追加,最常用,(3.0上,r+只能写到文件最末尾)
'w+' 写读,不常用
'a+' 追加读写,只能在最后加
'rb' 二进制文件,eg 视频文件是二进制格式 b'-----',b表示bytes。使用场景:1.网络传输,2.二进制文件
在python3.0里都是bytes格式。写的时候需要加encodeing,指定文件格式。跨平台的时候最好用二进制(linux->windows),视频、字符流也最好用二进制。
i.文件修改:
1.vim,将文件存到内存修改
2.修改完文件另存为一个新文件
13.with语句
为了避免打开文件后忘记关闭,使用with,即:
with open('file_name','r',encoding = 'utf-8') as f ,\
open('file_name2','r',encoding = 'utf-8') as f2 :
.....
14.python 一行代码一般不超过80个字符
15.文件编码:
Python 2.0x上默认的文件编码是ASIC码,ASIC不支持中文,所以中国有了GB2312.
UTF-8 是UniCode的一个扩展集。UniCode是万国编码,包含各个国家的编码。Windows默认的中国软件编码是GBK。GBK向下兼容GB2312.
ASIC码:占一个字节
UTF-8: 英文字符占1个字节,中文字符占3个字节,UTF8 是可变长的。
UniCode:占2个字节
GBK----------(decode)-------->UniCode------(encode)------------->UTF-8
Python 3.0默认编码是Unicode

浙公网安备 33010602011771号