一、列表、元祖操作
列表是我们最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作
定义一个列表
name = ['alex','tenglan','egg','eva_j']
通过下标访问列表中的元素,下标从0开始计数
print(name[0]) #结果输出alex print(name[2]) #结果输出egg print(name[-1]) #结果输出eva_j print(name[-2]) #结果输出egg
通过切片取多个元素:
names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] print(names[1:4]) #取下标1至下标4之间的数字,包括1,不包括4 #执行结果['Tenglan', 'Eric', 'Rain'] print(names[1:-1]) #取下标1至-1的值,不包括-1 #执行结果['Tenglan', 'Eric', 'Rain', 'Tom'] print(names[0:3]) #执行结果['Alex', 'Tenglan', 'Eric'] print(names[:3]) #如果是从头开始取,0可以忽略,跟上句效果一样 #执行结果['Alex', 'Tenglan', 'Eric'] print(names[3:]) #如果想取最后一个,必须不能写-1,只能这么写 #执行结果['Rain', 'Tom', 'Amy'] print(names[0::2]) #后面的2是代表,每隔一个元素,就取一个 #执行结果['Alex', 'Eric', 'Tom'] print(names[::2]) #和上句效果一样 #执行结果['Alex', 'Eric', 'Tom']
追加:
names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] names.append("我是新来的") print(names) #执行结果['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
插入
names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] names.insert(2,"我是插队的") print(names) #执行结果['Alex', 'Tenglan', '我是插队的', 'Eric', 'Rain', 'Tom', 'Amy']
修改
names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] names[2]="换人了" print(names) #执行结果['Alex', 'Tenglan', '换人了', 'Rain', 'Tom', 'Amy']
删除
names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] del names[4] #通过下标删除元素 print(names) #执行结果['Alex', 'Tenglan', 'Eric', 'Rain', 'Amy'] names.remove('Eric') #删除指定元素 print(names) #执行结果['Alex', 'Tenglan', 'Rain', 'Amy'] names.pop() #删除列表最后一个值 print(names) #执行结果['Alex', 'Tenglan', 'Rain']
扩展
names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] b = [1,2,3] names.extend(b) print(names) #执行结果:['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', 1, 2,
拷贝
names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] name_copy = names.copy() print(name_copy) #执行结果['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy']
统计
names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] print(names.count('Alex')) #统计列表中有多少个Alex #执行结果1
排序&翻转
names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] names.sort() print(names) #执行结果['Alex', 'Amy', 'Eric', 'Rain', 'Tenglan', 'Tom'] names.reverse() print(names) #执行结果['Tom', 'Tenglan', 'Rain', 'Eric', 'Amy', 'Alex']
获取下标
names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] print(names.index('Tom')) #执行结果4
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
他只有两个方法,一个是count统计个数,一个是index获取下标
二、字符串操作
特性:不可修改
#字符串的索引与切片 s = 'sadfwedfasdf' #索引 print(s[0]) #通过索引取第一位字符 #字符串切片 print(s[0:4]) #通过切片取前四位 (顾头不顾尾) print(s[-1]) #通过-1来取字符串的最后一位 print(s[0:]) #取所有的字符 print(s[:]) #两边什么都不写,也可以取全部 print(s[0:5:2]) #取前五个字符,每两个取一个,2位步长[首:尾:步长] print(s[4:0:-1]) #通过步长设置-1,吧首尾换一下,来实现字符串倒着写 #字符串的操作 s = 'alExwusir' s1 = s.capitalize() #让字符串首字母大写,其它全部小写 print(s1) s2 = s.upper() #让字符串全部变成大写 s21 = s.lower() #让字符串全部小写 print(s2) s3 = s.swapcase() #让大小写翻转 print(s3) t = 'alex egon wusir' t1 = t.title() #让每个特殊字符隔开的单子首字母大写 print(t1) s4 = s.center(20,'#') #让字符串在20个字符的位置居中显示,空白填充物为# print(s4) s5 = s.expandtabs() #如果字符串中有\t选项,输出结果自动加上tab的空格 print(s5) s6 = len(s) #获取字符串长度,元祖,字典,列表同样适用 print(s6) #通过前端传来一个字符串,通过判断前边三个字母的不同来进行不同的操作 s7 = s.startswith('al') #判断字符串是否已al开头 s71 = s.startswith('e',2,5) #判断字符串的第三位到第五位是否是以e开头 print(s71) s8 = s.find('l') #查找字符串中l的索引,找不到则返回-1,可切片在找 print(s8) s9 = s.index('l') #查找字符串中l的索引,找不到则回报错 print(s9) s = '*alExwusir% ' s10 = s.strip() #去掉字符串中前后所有的空格 s101 = s.strip('#') #去掉字符串中前后的#号 s102 = s.strip('* %') #中间得符号 可以不同,结果也会吧前后的删掉 s103 = s.rsplit('%') #删除字符串右边的*号 s104 = s.lstrip('*') #删除字符串左边的*号 print(s103) s11 = s.count('al') #统计字符串中有多少个al(可切片在找) print(s11) s = ':alex:egon:wusir' s12 = s.split() #默认以空格为分割符来分割字符串 s121 =s.split(':') #已冒号为分隔符来分割字符串 print(s121) #format的三种玩法,格式化输出 s = '我叫{},今年{},爱好{},再说一下我叫{}'.format('name',25,'test','name') print(s) s1 = '我叫{0},今年{1},爱好{2},再说一下我叫{0}'.format('name',25,'test') print(s1) s2 = '我叫{name},今年{age},爱好{hobby},再说一下我叫{name}'.format(name='name',age=25,hobby='test') print(s2) #替换 s = '你说什么就是什么好的哈东西南北东' s1 = s.replace('就是','好的哈',1) #替换字符串中的第一个就是为好的哈 print(s1) #is系列 name = 'jjjjoa234' print(name.isalnum()) #判断字符串是否有字母或数字组成 print(name.isalpha()) #判断字符串是否有字母组成 print(name.isdigit()) #判断字符串是否有数字组成 #for循环 s = 'fhdsklfds' for i in s: print(i)
三、字典操作
字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
语法:
info = { 'stu1101': "TengLan Wu", 'stu1102': "LongZe Luola", 'stu1103': "XiaoZe Maliya", }
字典的特性:
dict是无序的
key必须是唯一的,天生去重
#dict: ''' #数据类型划分:可变数据类型,不可变数据类型 不可变数据类型:元祖、bool、数字、str 可哈希 可变数据类型:列表、字典 、集合 不可哈希 字典的key必须是不可变数据类型,可哈希 字典的值value可以是任意数据类型 字典的优势: 1、二分查找去查询 2、存储大量的关系型数据 特点:无序的 ''' dic = { 'name':'张三', 'age':25, 'sex':'女' } #字典增加 dic['high'] = 185 #若原字典有high这个key,则会修改原有的值 dic['age'] = 20 dic.setdefault('weight',140) #添加元素,默认值是none print(dic) #字典删除 dic.pop('weight') #删除key为weight的键值对,是有返回值的,返回值为键值对的值,如果需删除的key在字典中没有,则会报错 dic.pop('二哥','没有此键') #如果添加一个值则就算字典中没有二哥这个key也不会报错 print(dic) dic.popitem() #随机删除一个键值,3.6版本之后从后往前删除 print(dic) del dic['name'] #删除键值对 print(dic) #dic.clear() #清空字典 #字典修改 dic['age'] = 18 #对值的修改 print(dic) dic = { 'name':'张三', 'age':25, 'sex':'女' } dic2 = { 'name':'张三', 'age':25, 'sex':'女', 'weight':140, 'hight':180 } dic2.update(dic) #把dic更新到dic2,相同的键值对覆盖,没有的添加 print(dic2) #字典查找 print(dic.keys()) #打印字典中的键为一个列表 print(dic.values()) #打印字典中的值为一个列表 print(dic.items()) #打印字典中的键值为一个元祖,所有元祖组成一个列表 for i in dic2: #什么都不写,默认打印键的值 print(i) for i in dic.items(): #打印键值对 print(i) print(dic['name']) #打印键对应的值 #字典嵌套 dic = { 'name':['alex','wusir'], 'py9':{ 'time':'1213', 'xuefei':19800, 'addr':'CBD' }, 'age':21, } dic['age'] = 56 dic['name'].append('ritian') dic['name'][1] = dic['name'][1].upper() dic['py9'].setdefault('女生',6) print(dic)
四、集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下:
去重,把一个列表变成集合,就自动去重了
关系测试,测试两组数据之间的交集、差集、并集等关系
s = set([3,5,9,10]) #创建一个数值集合 t = set("Hello") #创建一个唯一字符的集合 a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中) 基本操作: t.add('x') # 添加一项 s.update([10,37,42]) # 在s中添加多项 使用remove()可以删除一项: t.remove('H') len(s) set 的长度 x in s 测试 x 是否是 s 的成员 x not in s 测试 x 是否不是 s 的成员 s.issubset(t) s <= t 测试是否 s 中的每一个元素都在 t 中 s.issuperset(t) s >= t 测试是否 t 中的每一个元素都在 s 中 s.union(t) s | t 返回一个新的 set 包含 s 和 t 中的每一个元素 s.intersection(t) s & t 返回一个新的 set 包含 s 和 t 中的公共元素 s.difference(t) s - t 返回一个新的 set 包含 s 中有但是 t 中没有的元素 s.symmetric_difference(t) s ^ t 返回一个新的 set 包含 s 和 t 中不重复的元素 s.copy() 返回 set “s”的一个浅复制
五、文件操作
文件只读 mode = 'r' f = open('模特主妇护士班主任.txt',mode='r',encoding='utf-8') #打开文件 cont = f.read() #读取文件 print(cont) f.close() #关闭文件 打开非文字的文件或上传下载可用rb模式,已bytes类型模式打开文件 f = open('模特主妇护士班主任.txt',mode='rb',) cont = f.read() print(cont) f.close() 文件只写:对于写,没有此文件,则创建文件,如有文件则清空里边的内容后再添加需要写入的内容 mode = 'w' f = open('log',mode='w',encoding='utf-8') f.write('要的,好的哈 ,没问题') f.close() f = open('log',mode='wb') f.write('要的,好的哈 ,没问题'.encode('utf-8')) #使用wb时,在写的时候需要制定文件编码格式 f.close() 文件追加 f = open('log',mode='a',encoding='utf-8') #默认光标在文件最后 # f.write('fujinkandao de ') # f.close() # # f = open('log',mode='ab',) # f.write('ceshi'.encode('utf-8')) # f.close() 文件读写也有bytes类型mode='r+b' ,只会读写,后边不会做操作 f = open('log',mode='a+',encoding='utf-8') cont = f.read() f.write("119.84.155.118,123.151.77.12,101.226.226.247,101.226.226.167,61.151.173.71,61.151.186.145,113.96.230.31,123.151.76.43,113.96.230.24,101.226.226.213,119.84.155.78,113.96.230.37,119.84.155.92,113.96.230.63,61.151.186.211,123.151.144.20,61.151.173.78,61.151.186.199,61.151.186.198") f.write("119.84.155.118\n123.151.77.12\n101.226.226.247\n101.226.226.167\n61.151.173.71\n61.151.186.145\n113.96.230.31\n123.151.76.43\n113.96.230.24\n101.226.226.213\n119.84.155.78\n113.96.230.37\n119.84.155.92\n113.96.230.63\n61.151.186.211\n123.151.144.20\n61.151.173.78\n61.151.186.199\n61.151.186.198") f.write("101.226.212.107\n180.97.117.100\n61.151.168.227\n180.97.117.108\n14.215.140.25\n14.215.140.24\n14.215.140.21\n183.61.38.193\n101.226.76.160\n61.151.168.141\n180.97.117.101\n113.96.232.48\n101.91.63.156\n183.61.38.202\n180.97.9.122\n101.91.63.158\n180.97.8.103\n61.151.183.44\n101.91.63.157\n101.226.90.145\n113.96.232.100\n183.3.233.232\n183.61.38.245\n113.96.232.105\n180.97.117.116\n180.97.9.11\n180.97.117.50\n183.36.108.166\n61.151.206.58\n14.215.140.53\n180.97.9.100\n14.17.41.196\n180.97.9.125\n180.97.9.124\n180.97.9.123\n183.36.108.188\n113.96.208.21\n113.96.208.23\n113.96.208.22") f.write("61.151.182.237\n61.151.182.238\n61.151.173.26\n61.151.173.25\n61.151.182.236\n59.36.120.65\n61.151.182.235\n61.151.182.233\n61.151.182.234\n61.151.173.108\n61.151.172.55\n61.151.173.11\n183.3.255.181\n61.151.173.110\n61.151.172.165\n61.151.172.164\n183.3.255.179\n61.151.173.109\n61.151.172.163\n183.3.255.180") f.write("119.84.152.100\n101.226.99.191\n183.61.37.191\n183.61.37.193\n14.215.152.171\n14.215.152.170\n123.151.65.110\n123.151.65.111\n123.151.65.112\n119.84.152.36\n123.151.93.77\n180.163.8.14\n123.151.179.102\n180.163.30.155\n180.163.30.156") f.close() 文件写读(先清除再写,读的时候也只会从光标的位置读) f = open('log',mode='w+',encoding='utf-8') f.write('ceshiceshi') f.seek(0) #调整光标到最前面 cont = f.read() print(cont) 文件追加(写读) f = open('log',mode='a+',encoding='utf-8') f.write('jiaqi') f.seek(0) print(f.read()) f.close() 功能详解 f = open('log',mode='r+',encoding='utf-8') cont = f.read(3) #打印前三个字符,读出来的都是字符 f.seek(6) #seek是按照字节定光标的位置,中文一个字为三个字节 print(f.tell()) #查看现在光标所在的位置 cont = f.readable() #判断文件是不是可读的返回true或false cont = f.readline() #一行一行的读,想读第二行 cont = f.readlines() #多行读,把所有行读成列表,每行一个元素 f.truncate(5) #对源文件截取前五位 for line in f: print(line) f.close() with open( 'log',mode='r+',encoding='utf-8') as f,open('模特主妇护士班主任.txt') as h: #用这种方法可以不用在文件操作后边写关闭文件,且可以同时打开多个 print(f.read()) print(h.read())read import os os.remove('log') # 删除文件 os.rename('模特主妇护士班主任.txt','log1') #修改文件名
with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
with open('log',mode='r',encoding='utf-8') as f: #通过对文件句柄f的操作来操作文件