本节内容:
- 列表、元组操作
- 字符串操作
- 字典操作
- 集合操作
- 文件操作
一、列表、元组操作
1. 列表: 列表是我们使用频率最高的数据类型之一,由一个中括号 [ ]括起来,里面的值可以是任何类型(也可以是一个列表)。
列表的创建:
names = ['Island' , 'zhuzhu', 'zhu']
列表的主要使用方法有:增、删、改、查。
增:
zhu = ['a', 'b', 'c', 1, 2, [3, 'd']] zhu1 = ['e', 'fg'] zhu.append('a zhu') #第一种方法——.append()括号内加上所要加的内容,默认加到最后一位。 print(zhu) #结果:['a', 'b', 'c', 1, 2, [3, 'd'], 'a zhu'] zhu.insert(2, 'azhu') #第二种方法——.insert() 在第2个位置前强行加入需要的内容 print(zhu) #结果:['a', 'b', 'azhu', 'c', 1, 2, [3, 'd'], 'a zhu'] zhu.extend(zhu1) #第三种方法——.extend()在zhu列表的后边扩展zhu1 print(zhu) #结果:['a', 'b', 'azhu', 'c', 1, 2, [3, 'd'], 'a zhu', 'e', 'fg']
删:
zhu = ['a', 'b', 'c', 1, 2, [3, 'd']] zhu.remove('c') #删除指定元素 print(zhu) #结果:['a', 'b', 1, 2, [3, 'd']] del zhu[0] #利用索引值删除指定元素 print(zhu) #结果:['b', 1, 2, [3, 'd']] zhu.pop() #删除列表最后一个值 print(zhu) #结果:['b', 1, 2]
改:
zhu = ['a', 'b', 'c', 1, 2, [3, 'd']] zhu[3] = '变' #利用索引值修改 print(zhu) #结果:['a', 'b', 'c', '变', 2, [3, 'd']]
查:
zhu = ['a', 'b', 'c', 1, 2, [3, 'd']] print('zhu[1]:', zhu[1], '\nzhu[-1]:', zhu[-1]) #:利用索引值查找,索引值为负时表示倒数第n个 (\n为换行) #结果:zhu[1]: b # zhu[-1]: [3, 'd']
统计:
zhu = ['a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5'] print(zhu.count('a')) #统计元素个数 #结果:2
获取下标:
zhu = ['a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5'] print(zhu.index('a')) #获取下标 默认从左到右搜索找到的第一个元素,获取他的下标 #结果:0 print(zhu.index('a',2)) #获取第二个'a'的下标 #结果:6
排序和反转:
# zhu = ['a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5'] # zhu.sort() # 结果: # Traceback (most recent call last): # File "C:/Users/48316/PycharmProjects/untitled1/zhu1/text_.py", line 2, in <module> # zhu.sort() # TypeError: unorderable types: int() < str() py3之后不同的数据类型不能排序 zhu = ['a', 'b', 'c', '1', '2', 'a', '2', '5'] zhu.sort() #按照ASCII码排序 print(zhu) #结果['1', '2', '2', '5', 'a', 'a', 'b', 'c'] zhu.reverse() #反转 print(zhu) #结果['c', 'b', 'a', 'a', '5', '2', '2', '1']
2.元组:元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表。它只有2个方法,一个是count,一个是index,完毕。
语法:
zhu = ('a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5') #和列表基本类似 只是用圆括号括起来 print(zhu) #结果:('a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5')
二、字符串操作
特性:不可修改。
各种操作:
#_author: "a zhu" #_date: 2018/2/1 str='abcd EFGH ijk' #直接创建字符串 用引号括起来 print(str.upper()) #将字符串内所有的字符大写 #结果:ABCD EFGH IJK print(str.casefold())#将字符串内所有的字符小写 #结果:abcd efgh ijk print(str.capitalize())#将字符串首字母大写 #结果:Abcd efgh ijk print(str.count(' ')) #统计字符‘ ’出现次数 #结果:2 print(str.endswith('jk'))#判断字符串是否以'jk'结尾 #结果:True print(str.center(30,'-')) #给字符串两边加上'-',一共30个 #结果:--------abcd EFGH ijk--------- print(str.find(' ')) #找到字符' '的索引值,找不到返回-1 #结果:4 msg = "my name is {}, and age is {}." print(msg.format('飞天zhuzhuxia','19')) #结果:my name is 飞天zhuzhuxia, and age is 19. msg = "my name is {1}, and age is {0}." print(msg.format('飞天zhuzhuxia','19')) #结果:my name is 19, and age is 飞天zhuzhuxia. msg = "my name is {name}, and age is {age}." print(msg.format(age='19', name='飞天zhuzhuxia')) #结果:my name is 飞天zhuzhuxia, and age is 19. print(msg.partition('is')) #从'is'出断开 变为三个元素组成的元组 #结果:('my name ', 'is', ' {name}, and age is {age}.') print(str.ljust(20,'-')) #结果:abcd EFGH ijk------- print(str.rjust(20,'-')) #结果:-------abcd EFGH ijk
三、字典操作
字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
字典的特性:
- dict是无序的
- key必须是唯一的,so 天生去重
字典的创建:
dict ={ 'shannxi': 'xian', 'sichuan': 'chengdou', 'hunan': 'zhengzhou', 'shanxi': 'taiyuan', 'beijing': 'sanlitun' } #字典由一对一对的键值对组成
字典的增、删、改、查:
增加:
dict['shanghai'] = '东方明珠'#直接输入新的键值,给简直赋值就可增加 print(dict) #结果:{'shanxi': 'taiyuan', 'hunan': 'zhengzhou', 'sichuan': 'chengdou', 'shannxi': 'xian', 'shanghai': '东方明珠', 'beijing': 'sanlitun'}
删除:
dict.pop('shanxi') print(dict) #结果:{'sichuan': 'chengdou', 'beijing': 'sanlitun', 'shannxi': 'xian', 'hunan': 'zhengzhou'} del dict['sichuan'] print(dict) #结果:{'beijing': 'sanlitun', 'shannxi': 'xian', 'hunan': 'zhengzhou'} dict.popitem()#随机删除 print(dict) #结果:{'beijing': 'sanlitun', 'hunan': 'zhengzhou'}
修改:
dict['beijing'] = 'chaoyang' #利用键值进行修改 print(dict) #结果:{'beijing': 'chaoyang', 'hunan': 'zhengzhou', 'sichuan': 'chengdou', 'shanxi': 'taiyuan', 'shannxi': 'xian'}
查看:
print(dict['shanxi']) #利用键值可以查看 但是如果没有该键值就会报错 #结果:taiyuan print(dict.get('sichuan1'))#这样就不会报错 如果没有就会返回None
其他:
print(dict.values()) #结果:dict_values(['xian', 'zhengzhou', 'chengdou', 'taiyuan', 'sanlitun']) print(dict.keys()) #结果:dict_keys(['beijing', 'hunan', 'sichuan', 'shanxi', 'shannxi']) b = {1: 2, 3: 4} dict.update(b) print(dict) #结果:{1: 2, 'sichuan': 'chengdou', 3: 4, 'shanxi': 'taiyuan', 'hunan': 'zhengzhou', 'shannxi': 'xian', 'beijing': 'sanlitun'}
循环dict:
for key in dict: print(key,dict[key]) '''hunan zhengzhou shannxi xian beijing sanlitun shanxi taiyuan sichuan chengdou''' for k,v in dict.items(): #会先把dict转成list,数据里大时莫用 print(k,v) '''hunan zhengzhou shannxi xian shanxi taiyuan beijing sanlitun sichuan chengdou'''
四、集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
各种使用方法:
s = set([3, 5, 9, 10]) # 创建一个数值集合 t = set("Hello") # 创建一个唯一字符的集合 t.add('c') #添加元素 print(t) #结果:{'H', 'c', 'e', 'l', 'o'} s.update([10,37,42]) # 在s中添加多项 print(s) #结果:{3, 37, 5, 9, 10, 42} t.remove('H') #删除指定元素 print(t) #结果:{'c', 'e', 'l', 'o'} print(len(s)) #set的长度 #结果:6 print('x' in s) #测试x是否是s的成员 #结果:False print('x' not in s ) #测试x是否不是s的成员 #结果:True print(s.issubset(t)) #结果:False #s <= t 测试是否s中的每一个元素都在t中 print(s.issuperset(t))#结果:False #s >= t #测试是否t中的每一个元素都在s中 print(s.union(t)) #结果:{'e', 3, 42, 37, 5, 'l', 'c', 9, 10, 'o'} #s | t 返回一个新的set包含s和t中的每一个元素 print(s.intersection(t))#结果:set() #s & t 返回一个新的set包含s和t中的公共元素 print(s.difference(t))#结果:{3, 5, 37, 9, 10, 42} #s - t 返回一个新的set包含s中有但是t中没有的元素 print(s.symmetric_difference(t))#结果:{'l', 3, 37, 5, 9, 10, 42, 'e', 'c', 'o'} #s ^ t 返回一个新的set包含s和t中不重复的元素
五、文件操作
对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
现在有一个word文件如下:
纤云弄巧,飞星传恨,银汉迢迢暗度。
金风玉露一相逢,便胜却人间无数。
柔情似水,佳期如梦,忍顾鹊桥归路。
两情若是久长时,又岂在朝朝暮暮。
f = open('鹊桥仙') #打开文件 data=f.read()#获取文件内容 f.close() #关闭文件
注意 if in the win,hello文件是utf8保存的,打开文件时open函数是通过操作系统打开的文件,而win操作系统
默认的是gbk编码,所以直接打开会乱码,需要f=open('hello',encoding='utf8'),hello文件如果是gbk保存的,则直接打开即可。
三种最基本的文件打开模式:
# f = open('鹊桥仙2','r') #打开文件 只读 # f = open('鹊桥仙2','w') #打开文件 只写 # f = open('鹊桥仙2','a') #打开文件 追加 #如果系统找不到要打开的文件名,则会创建一个文件。
集体操作:
f = open('鹊桥仙') #打开文件 # data1=f.read()#获取文件内容 # data2=f.read()#获取文件内容 # # print(data1) # print('...',data2) # data=f.read(5)#获取文件内容 # data=f.readline() # data=f.readline() # print(f.__iter__().__next__()) # for i in range(5): # print(f.readline()) # data=f.readlines() # for line in f.readlines(): # print(line) # 问题来了:打印所有行,另外第3行后面加上:'end 3' # for index,line in enumerate(f.readlines()): # if index==2: # line=''.join([line.strip(),'end 3']) # print(line.strip()) #切记:以后我们一定都用下面这种 # count=0 # for line in f: # if count==3: # line=''.join([line.strip(),'end 3']) # print(line.strip()) # count+=1 # print(f.tell()) # print(f.readline()) # print(f.tell())#tell对于英文字符就是占一个,中文字符占三个,区分与read()的不同. # print(f.read(5))#一个中文占三个字符 # print(f.tell()) # f.seek(0) # print(f.read(6))#read后不管是中文字符还是英文字符,都统一算一个单位,read(6),此刻就读了6个中文字符 #terminal上操作: f = open('鹊桥仙2','w') # f.write('hello \n') # f.flush() # f.write('world') # 应用:进度条 # import time,sys # for i in range(30): # sys.stdout.write("*") # # sys.stdout.flush() # time.sleep(0.1) # f = open('鹊桥仙2','w') # f.truncate()#全部截断 # f.truncate(5)#全部截断 # print(f.isatty()) # print(f.seekable()) # print(f.readable()) f.close() #关闭文件
其他的文件模式:
# f = open('鹊桥仙2','w') #打开文件 # f = open('鹊桥仙2','a') #打开文件 # f.write('莫等闲1\n') # f.write('白了少年头2\n') # f.write('空悲切!3') # f.close() #r+,w+模式 # f = open('鹊桥仙2','r+') #以读写模式打开文件 # print(f.read(5))#可读 # f.write('hello') # print('------') # print(f.read()) # f = open('鹊桥仙2','w+') #以写读模式打开文件 # print(f.read(5))#什么都没有,因为先格式化了文本 # f.write('hello alex') # print(f.read())#还是read不到 # f.seek(0) # print(f.read()) #w+与a+的区别在于是否在开始覆盖整个文件 # ok,重点来了,我要给文本第三行后面加一行内容:'hello 岳飞!' # 大家会说,前面不是做过修改了吗? 大哥,刚才是修改内容后print,现在是对文件进行修改!!! # f = open('鹊桥仙2','r+') #以写读模式打开文件 # f.readline() # f.readline() # f.readline() # print(f.tell()) # f.write('hello 岳飞') # f.close() # 和想的不一样,不管事!那涉及到文件修改怎么办呢? # f_read = open('小重山','r') #以写读模式打开文件 # f_write = open('小重山_back','w') #以写读模式打开文件 # count=0 # for line in f_read: # if count==3: # f_write.write('hello,岳飞\n') # # else: # f_write.write(line) # another way: # if count==3: # # line='hello,岳飞2\n' # f_write.write(line) # count+=1
文件操作还有许多小点就不一一列举了。