python数据类型、字符编码、文件处理
一 引子 |
1 什么是数据
x=10,10是我们要存储的数据
2 为何数据要分不同的类型
数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示
3 数据类型
数字(整形,长整形,浮点型,复数)
字符串
字节串:在介绍字符编码时介绍字节bytes类型
列表
元组
字典
集合
二 数字 |
a=int(10) #表示显示a的id号,id号是这个值申请的内存空间。a的数据类型。 #要判断两个值是不是在一个内存空间可以用is判断 #要是id值一样的话说明两个值是在一个内存空间 #两个值怎样判断是在一个内存空间,1.值得长度比较短,2.值是一样的 print(id(a),type(a),a)
b=3.1
print(id(a),type(a),a)
#正向取值 name = 'meng' print(name[0]) #打印结果 m
取字符串中最后一个值。
#反向取值 name = 'meng' print(name[-1]) #打印结果 g
name = 'meng' print(name[1:3]) #打印 eng
name = 'hello world' print(name[0:5:2]) #打印 hlo
name='hello world' print(name[-5:-1]) #打印 worl
name='hello world' print(len(name)) #打印(这就是字符串的个数) 11
name='hello world' print('h' in name) #打印 True
#strip()没有指定参数,没有指定参数默认是取出空格 name= ' hello world ' print(name.strip()) #打印 hello world
#strip()指定参数,这个参数是指你要移除的值,但是只能移除两面的中间的不可以移除 name= '******hello*** world*********' print(name.strip('*'))
#打印 hello*** world
name=' root:admin:0:1:/home/etc/a.txt ' print(name.lstrip()) #打印 root:admin:0:1:/home/etc/a.txt
name=' root:admin:0:1:/home/etc/a.txt ' print(name.rstrip())
#打印 root:admin:0:1:/home/etc/a.txt
name='root:admin:0:1:/home/etc/a.txt' print(name.startswith('root'))
#打印 True
name='root:admin:0:1:/home/etc/a.txt' print(name.endswith('txt'))
#打印 True
name='root:admin:0:1:/home/etc/a.txt' print(name.replace('root','meng'))
#打印 meng:admin:0:1:/home/etc/a.txt
name='root:admin:0:1:/home/etc/a.txt:root' print(name.replace('root','meng',1)) #打印 meng:admin:0:1:/home/etc/a.txt:root
name = input("name:") age = int(input("age:")) work = input("work:") wage = input("wage:") info = ''' ---------info fo {_name}--------- name:{_name} age:{_age} work:{_work} wage:{_wage}'''.format(_name=name, _age=age, _work=work, _wage=wage) print(info)
#打印 ---------info fo meng--------- name:meng age:13 work:it wage:1000
name = input("name:") age = int(input("age:")) work = input("work:") wage = input("wage:") info = ''' ---------info of %s----------- name:%s age:%d work:%s wage:%s ''' %(name,name,age,work,wage) #打印 ---------info fo meng--------- name:meng age:13 work:it wage:1000
name='root:admin:0:1:/home/etc/a.txt:root' print(name.find('t')) #打印 3
name='root:admin:0:1:/home/etc/a.txt:root' print(name.count('r'))
#打印 2
name='root:admin:0:1:/home/etc/a.txt:root' print(name.count('r',0,2))
#打印 1
name='root:admin:0:1:home:etc/a.txt:root' name=name.split(':') print(name) print(':'.join(name))
#打印 ['root', 'admin', '0', '1', 'home', 'etc/a.txt', 'root'] root:admin:0:1:home:etc/a.txt:root
name='meng' print(name.center(30,'='))
#打印 =============meng=============
注:有两个参数一个是宽带,一个是用什么填充
name='meng' print(name.rjust(30,'=')) #打印 ==========================meng
name='meng' print(name.ljust(30,'='))
#打印 meng==========================
name='meng' print(name.zfill(30)) #打印 00000000000000000000000000meng
name='me\tng' print(name.expandtabs(5))
#打印 me ng
name='meng' print(name.capitalize())
#打印 Meng
name='meng' print(name.upper()) #打印 MENG
name='meng' print(name.lower()) #打印 meng
name='meng asd das' print(name.title())
#打印 Meng Asd Das
name='Meng aSd das' print(name.swapcase()) #打印 mENG AsD DAS
name='root:admin:/home/etc/a.txt' print(name.split(':')) print(name.split(':')[0]) #打印 ['root', 'admin', '/home/etc/a.txt'] root
name='root:admin:0:1:/home/etc/a.txt' print(name.split(':',2)) #打印 ['root', 'admin', '0:1:/home/etc/a.txt']
name='Meng aSd das' print(name.isupper()) #打印 False
name='Meng aSd das' print(name.islower())
#打印 False
name='Meng aSd das' print(name.istitle()) #打印 False
name=' ' print(name.isspace())
#打印 True
name='if' print(name.isidentifier())
#打印 True
name='123' print(name.isdigit()) #打印 True
name='asdas123' print(name.isalnum()) #打印 True
name='asdas' print(name.isalpha()) #打印 True
name=['dick','admin','meng'] print(name[1]) #打印 admin
name=['dick','admin','meng'] name[2]='root' print(name) #打印 ['dick', 'admin', 'root']
name=['dick','admin','meng'] name.append('root') print(name) #打印 ['dick', 'admin', 'meng', 'root']
name=['dick','admin','meng'] del name[1] print(name) #打印 ['dick', 'meng']
name=['dick','admin','meng'] name.remove('admin') print(name) #打印 ['dick', 'meng']
name=['dick','admin','meng'] print(name.pop()) print(name) #打印(meng是被剪切掉的) meng ['dick', 'admin']
name=['dick','admin','meng'] print(name.pop(1)) print(name) #打印 admin ['dick', 'meng']
name=['dick','admin','meng'] name.insert(1,'666') print(name) #打印 ['dick', '666', 'admin', 'meng']
name=['dick','admin','meng'] a=[1,2,3,4] name.extend(a) print(name) #打印 ['dick', 'admin', 'meng', 1, 2, 3, 4]
name=['dick','admin','meng'] print(name.count('dick')) #打印 1
name=['dick','admin','meng'] name.clear() print(name) #打印 []
name=['dick','admin','meng'] l=name.copy() print(l) #打印 ['dick', 'admin', 'meng']
name=['dick','admin','meng'] name.reverse() print(name) #打印 ['meng', 'admin', 'dick']
name=['dick','admin','meng'] name.sort() print(name) #打印 ['admin', 'dick', 'meng']
name=name=[1,3,9,7,-1] name.sort(reverse=True) print(name) #打印 [9, 7, 3, 1, -1]
data=['alex',49,[1900,3,18]] name=data[0] age=data[1] year=data[2][0] mothe=data[2][1] day=data[2][2]
user_info=''' 姓名:{name} 年龄:{age} 出生日期:{year}:{mothe}:{day} '''.format(name=name,age=age,year=year,mothe=mothe,day=day) print(user_info)
a=[] a.append(1) a.append(2) a.append(3) print(a.pop(1)) print(a.pop(1)) print(a.pop(1))
#打印 1 2 3
a=[] a.append(1) a.append(2) a.append(3) print(a.pop()) print(a.pop()) print(a.pop()) #打印 3 2 1
l=[ {'name':'alex','age':18}, {'name': 'dick', 'age': 20}, {'name': 'admin', 'age': 19}, ] l.sort(key=lambda item:item['age']) print(l)
#打印 [{'name': 'alex', 'age': 18}, {'name': 'admin', 'age': 19}, {'name': 'dick', 'age': 20}]
#定义方式:age=(1,2,3,4,5,6) #注:元组和列表一样,但是元组是不可变类型只是做查询取值用。 #列表别元组站内存多
按索引取值(正反向)
请参考列表操作
a=('a','c','v','a') print(a.index('v')) #打印 2
a=('a','c','v','a') print(a.count('a')) #打印 2
#作用:存多个值,key-value存取,取值速度快 #定义:key必须是不可变类型,value可以是任意类型 #按key存取值
l=[ {'name':'alex'}, {'name': 'dick'}, {'name': 'admin'},] print(l[1]['name']) #打印 dick
#添加 l={'0':'alex', '1': 'dick', '2': 'admin'} l['3']=1 print(l) #打印 {'0': 'alex', '1': 'dick', '2': 'admin', '3': 1} #修改 l={'0':'alex', '1': 'dick', '2': 'admin'} l['0']=1 print(l) #打印 {'0': 1, '1': 'dick', '2': 'admin'}
l={'0':'alex', '1': 'dick', '2': 'admin'} print(l.pop('0')) print(l) #打印 alex {'1': 'dick', '2': 'admin'} #添加自定义错误信息 l={'0':'alex', '1': 'dick', '2': 'admin'} print(l.pop('3','没有')) #打印 没有
l={'0':'alex', '1': 'dick', '2': 'admin'} print(l.get('0')) print(l.get('3')) #打印 alex None
l={'0':'alex', '1': 'dick', '2': 'admin'} print(l.keys()) #打印 dict_keys(['0', '1', '2'])
l={'0':'alex', '1': 'dick', '2': 'admin'} print(l.values) #打印 dict_values(['alex', 'dick', 'admin'])
l={'0':'alex', '1': 'dick', '2': 'admin'} print(l.items()) #打印 dict_items([('0', 'alex'), ('1', 'dick'), ('2', 'admin')])
l={'0':'alex', '1': 'dick', '2': 'admin'} for key,values in l.items(): print(key,values) #打印 0 alex 1 dick 2 admin
l={'0':'alex', '1': 'dick', '2': 'admin'} print(l.popitem()) #打印 ('2', 'admin')
l={'0':'alex', '1': 'dick', '2': 'admin'} a={'0':'Alex', '3':"root"} l.update(a) print(l) #打印 {'0': 'Alex', '1': 'dick', '2': 'admin', '3': 'root'}
解释:
update操作是把其他的字典和自己的字典合在一个,如果自己字典和另一个字典键重复的时候自己字典的面的值则会被覆盖
dic={}.fromkeys(['admin','dick','root'],None) print(dic) #打印 {'admin': None, 'dick': None, 'root': None}
l={'0':'alex', '1': 'dick', '2': 'admin'} print(l.setdefault('0','aaa')) print(l.setdefault('3','bbb')) print(l) #打印 alex bbb {'0': 'alex', '1': 'dick', '2': 'admin', '3': 'bbb'}
解释:
当字典里面有这个key的话就返回字典里面key的值,如果没有就添加这个键值对并返回添加的值。
a=10 b=20 a,b=b,a print(a,b) #打印 20 10
a=b=c=10 print(a,b,c) #打印 10 10 10
a,b,c=('admin','root','dick') print(a,b,c) #打印 admin root dick
a,*_,c=('admin','root','dick') print(a,c) #打印 admin dick
七 集合 |
#作用:
去重,关系运算 #定义: #可以包含多个元素,用逗号分割, #集合的元素遵循三个原则: #1:每个元素必须是不可变类型(可hash,可作为字典的key) #2:没有重复的元素 #3:无序 a={1,2,3,4} a=set({1,2,3,4})
python={'alex','dick','admin','root'} linux={'dick','root','meng'} print(python | linux) #打印 {'root', 'alex', 'dick', 'admin', 'meng'}
python={'alex','dick','admin','root'} linux={'dick','root','meng'} print(python & linux) #打印 {'root', 'dick'}
python={'alex','dick','admin','root'} linux={'dick','root','meng'} print(python - linux) #打印 {'alex', 'admin'}
python={'alex','dick','admin','root'} linux={'dick','root','meng'} print(python ^ linux) #打印 {'meng', 'alex', 'admin'}
python={'alex','dick','admin','root','meng'} linux={'dick','root','meng'} print(python > linux) #打印 True python={'alex','dick','admin','root',} linux={'dick','root','meng'} print(python > linux) #打印 false
python={'dick','root','meng'} linux={'dick','root','meng'} print(python >= linux) #打印 True
python={'alex','dick','admin','root','meng'} linux={'dick','root','meng'} print(python.issuperset(linux)) #打印 True
python={'alex','dick','admin','root','meng'} linux={'dick','root','meng'} print(linux.issubset(python)) #打印 True
linux={'dick','root','meng'} print(linux.pop()) print(linux) #打印 root {'meng', 'dick'}
解释:
随机删除并返回删除的值
linux={'dick','root','meng'} print(linux.remove('dick')) print(linux) #打印 None {'meng', 'root'}
解释:
只是单纯的删没有返回值,没有的话会报错
linux={'dick','root','meng'} print(linux.discard('dick123')) print(linux) #打印 None {'root', 'dick', 'meng'}
注:
没有返回值,但是没有值得话不会报错
linux={'dick','root','meng'} print(linux.add('dick123')) print(linux) #打印 None {'meng', 'root', 'dick123', 'dick'}
python={'alex','dick','admin','root',} linux={'meng'} print(linux.isdisjoint(python)) #打印 True
python=['alex','dick','admin','dick'] python=list(set(python)) print(python) #打印 ['admin', 'dick', 'alex']
python=['alex','dick','admin','dick'] python_list=[] python_set=set() for i in python: if i not in python_set: python_set.add(i) python_list.append(i) print(python_list) #打印 ['alex', 'dick', 'admin']
l=[ {'name':'egon','age':18,'sex':'male'}, {'name':'alex','age':73,'sex':'male'}, {'name':'egon','age':20,'sex':'female'}, {'name':'egon','age':18,'sex':'male'}, {'name':'egon','age':18,'sex':'male'}, ] l_list=list() l_set=set() for i in l: res=(i['name'],i['age'],i['sex']) if res not in l_set: l_set.add(res) l_list.append(i) print(l_list) #打印 [{'name': 'egon', 'age': 18, 'sex': 'male'}, {'name': 'alex', 'age': 73, 'sex': 'male'}, {'name': 'egon', 'age': 20, 'sex': 'female'}]
八 数据类型总结 |
标量/原子类型 |
数字,字符串 |
容器类型 |
列表,元组,字典 |
可变 |
列表,字典 |
不可变 |
数字,字符串,元组 |
直接访问 |
数字 |
顺序访问(序列类型) |
字符串,列表,元组 |
key值访问(映射类型) |
字典 |
九 字符编码 |
暂无
十 文件处理 |
f=open('a.txt',mode='r',encoding='utf-8') #这步操作是发送系统调用,告诉操作系统我要打开文件,然后操作系统打开完成后会返回一个文件句柄赋值到f。这时有两个资源被占用一个是系统内存资源因为操作系统打开的文件,还有一个是python的内存资源,因为python正拿着文件句柄。 #第一个参数是指文件的路径, #第二个参数是指打开文件的模式,r是读 #第三个参数是指字符编码,否则就会出现乱码的情况,原则就是以什么方式存就以什么方式取
data=f.read() #这步操作是根据系统返回的文件句柄来读取文件里面的内容,根据文件句柄让操作系统找到要操作那个文件(也是给操作系统发送一个系统调用),并赋值到data变量中。
f.close() #发送系统调用告诉操作系统你把这个文件句柄对应的文件给关闭掉(这是系统级别的关闭)。 #python当这个变量使用完后python自动回收用完的变量(这时python级别的关闭)
with open('a.txt','r',encoding='utf-8') as f: print(f.read)
f=open('a.txt',mode='r',encoding='utf-8') #读模式的方法 print(f.readable()) #判断是不是可读文件,返回布尔值 print(f.read()) #读文件里面的所有内容到内存 print(f.readline()) #一次读一行 print(f.readlines()) #也是读所有,但是把读出来的结果放到列表里。
f=open('a.txt',mode='w',encoding='utf-8') #写模式的方法 print(f.wirtable()) #判断文件是不是可写问件,返回布尔值。 f.wirt('1111\n') #往文件里的写操作 f.wirtlines(['444\n','555\n']) #把列表里面的内容放到文件里面去
f=open('a.txt',mode='w',encoding='utf-8') #追加写的方法 #完全可以采用写的方法
with open('a.txt','r',encoding='utf-8') as f: for line in f: print(line)