博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
笔记--Day2--python基础2
阅读量:5071 次
发布时间:2019-06-12

本文共 11977 字,大约阅读时间需要 39 分钟。

一、鸡汤

1.提高自我修养

2.人丑就要多读书

3.多走走,开拓眼界

二、目录:

1.列表、元组操作

2.字符串操作

3.字典操作

  • dict是无序的
  • key必须是唯一的

4.集合操作

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

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

5.文件操作

 文件操作流程:

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件 

 文件操作模式:

  • 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

6.字符编码与转码

Python2中的字符串进行字符编码转换过程是:

  •    字节串-->decode('原来的字符编码')-->Unicode字符串-->encode('新的字符编码')-->字节串

Python3中定义的字符串默认就是unicode,因此不需要先解码,可以直接编码成新的字符编码:

  • 字符串-->encode('新的字符编码')-->字节串

 


 

三、练习

1.列表元组操作练习

#pycharm 5.0.3(python3.6)#定义一个空列表names = []print('打印空列表names:',names)#定义一个班级人员的列表names = ['Alex','Felix','Fion','Susan']#按下标取列表中的数据下标从0开始print("取'Felix':",names[1])#截取中间位置的人员 ,切片所取的位置包含其实位置,不包含结束位置(顾头不顾尾)print('切片_方法1_明确位置:',names[1:3])print('切片_方法2_取末尾:',names[-1]) #从右开始往左数是-1,-2.。。print('切片_方法3_取最后边:',names[-3:-1]) #如果要取后3个的话,写-1就不行了,只能取2个:print('切片_方法4_取最后边:',names[-3:]) #可以省略不写,这样就可以取多个了print('切片_方法5_取前3:',names[0:3]) #起始位置可以写0,也可以忽略print('切片_方法5_取前3:',names[:3])  #同上print('切片_方法6_按步长:',names[0:-1:2])print('列表的增删改查:'.center(40,'#'))names.append('Bob') #追加_末位最佳print('追加_末位追加:',names)names.insert(1,'Jack') #追加_任意位置print('追加_任意位置:',names)names[2] = 'Wulin' #修改,将列表下边是2的名称修改掉print('修改:',names)names.remove('Wulin') #删除print('删除_remove方式',names)del names[1]print('删除_del方式',names)print(names.pop())  #不带下标,删除最后一个并返回删除的值print('删除_pop方式',names) #删除后的结果print('查找_找下标:',names.index('Fion'))#查找人员索引位置,没有回报错print('查找_找下标_借下标打印出名称:',names[names.index('Fion')]) #看似多此一举names.insert(1,'Fion')#班级姓名重复的情况,可以统计重复的个数print('统计重复个数:',names.count('Fion'))#清除列表clear name.clearnames.reverse()#反转print('反转:',names)names.insert(3,'4zhang') #插入数字开头的names.insert(3,'!#woaini') #插入特殊字符开始的names.sort()#排序print('排序',names)names2 = [12,34,5]names.extend(names2)#将names2并入到nameprint('打印合并后的两个列表:',names)print('以下为浅复制相关'.center(50,'-'))#以下浅复制相关,需要记住这个特性,尽管用的较少#列表中可以包含列表names.insert(0,['age','grade']) #向列表中插入一个列表 #print('打印包含列表的列表:',names)names3 = names.copy()#后边用到,浅copy,复制一个列表出来print('打印copy前的列表:',names)print('打印copy后的列表:',names3)names[0][0] ='sex' #修改列表中列表的值names[5] ='Wo' #修改names列表中Susan的名称为Wo,然后对比复制前复制后列表值的变化print('打印修改后的列表:',names)print('打印copy后的列表:',names3)#对比以上4个打印结果可以发现,列表中列表的值names和names3都被修改了,但是列表中的值只有names里边被修改了,这个叫浅copy#即只copy了第一层,由于列表中的列表只是个内存地址,所以修改names的列表中的列表的值后names3中的也跟着变了。print('以下为深copy相关'.center(50,'-'))#一下深复制相关,不随便用,通常不需要随便复制一份(比如数据比较大的情况)import copy #此时需要用到copy模块print('打印深copy前的列表:',names)names4 = copy.deepcopy(names) #调用copy模块的深copynames[0][0] = 'home' #修改列表中列表的值print('打印深copy后的列表:',names)print('打印深copy后的列表:',names4) #可以发现列表没有变化print('以下为列表的循环'.center(50,'-')) #for i in names:    print(i)print('以下为浅复制的一个场景'.center(50,'-'))person = ['name',['saving',100]]'''#3中浅copy方式p1 = copy.copy(person) #p2 = person[:] #切片p3 = list(person) #工厂函数#浅copy什么情况下比较有用'''#有以下两个人,都基于person复制过来,两人有一个共同账号,如果一个少了50则另一个发现也少了50p1 = person[:]p2 = person[:]p1[0]='Felix'p2[0]='Fiona'p1[1][1] =50  #公共账号少了50,那么两个人发现都少了50print(p1)print(p2)
列表代码
元组代码

2.字符串操作练习

#pycharm 5.0.3(python3.6)name = 'my \tname is felix {first},my age is {age}'#pycharm有提醒功能,当输入name.的时候就会提醒字符串都有哪些操作,有两个下划线开始结尾的不用管print('首字母大写:',name.capitalize())print('统计个数',name.count('i'))print('总共50个字符,不够的用-补齐:',name.center(50,'-'))print('以什么结尾,匹配上则为真:',name.endswith('x'))print('将tab转为多少个空格:',name.expandtabs(tabsize=20)) #在变量值中插入一个tabprint('查找,返回值所在的位置',name.find('is'))#字符串的切片print('字符串的切片:',name[name.find('is'):11])print('格式化字符串,向{}中传值:',name.format(first='Song',age=23))print('格式化字符串,传字典形式的值:',name.format_map({
'first':'Song','age':12}))print('ab23!'.isalnum()) #'是否是阿拉伯数字,如果里边有特殊字符返回falseprint('ab'.isalpha())#是否是存英文字符print('1A'.isdecimal())#是否是十进制print('10'.isdigit())#是否是整数print('1A'.isidentifier()) #是否是一个合法的标识符 关注变量的命名规则,不符合的则为Falseprint('A'.islower()) #判断是不是小写print('22'.isnumeric()) #判断是不是一个数字,只识别整数print(' '.isspace())#是否是空格print('my name is '.istitle()) #判断一个字符串是不是title,每个首字母大写print(''.isprintable())#是否可以打印,字符串不用考虑,比如还是tty文件print('s'.isupper())#判断是不是大写print('+'.join(['1','2','3','4']))#将列表中的字符串用某一个字符连接print(name.ljust(50,'*')) #和center类似,50个字符,不够的用*号补齐print(name.rjust(50,'*'))print('FELIX'.lower())#把大写变成小写print('felix'.upper())#把大写变成小写print('\nFelix'.lstrip())# strip默认会去除两边默认的空格回车 ,lstrip是去除左边的空格回车print('Felix\n'.rstrip())print('Felix\n'.strip())# strip默认会去除两边默认的空格回车print('------')p = str.maketrans('abcdef','123456') # 做映射,可以做随机密码来玩print('Felix'.translate(p))#str = 'http://www.baidu.com/index'print(str.partition('://'))#从左边找指定的分隔符将字符串进行分割#返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。print('Felix'.replace('i','I'))print('felix songi'.rfind('i')) #从做往右,找到最右边那个值的下标返回print('123'.rindex('3'))#返回子字符串 str 在字符串中最后出现的位置,如果没有匹配的字符串会报异常str = 'http://www.baidu.com/index'print(str.rpartition('/'))##从右边找指定的分隔符将字符串进行分割print('fe li xl'.split(' '))print('fe li\n xl'.splitlines()) #按换行来分print('felix'.startswith('f')) #判断是否是什么开头的print('Felix Song'.swapcase()) #大写边小写,小写边大写print('Felix Song'.zfill(50)) #50个字符不够数的用0填充
练习代码

3.字典操作练习

#pycharm 5.0.3(python3.6)#定义一个字段(key-value格式)info = {    'stu1101':'TengLan Wu',    'stu1102':'LonZe Luola',    'stu1103':'XiaoZe Maliya',        }print(info) #字典是无序的#查,方法1,如果key不存在的话会出错print('取字典中某一个key对应的值:',info['stu1101'])#查,方法2,有就返回,没有就返回none,这是一种安排的方法print(info.get('stu1104'))#查,方法3,判断key在不在,不在就返回Falseprint('stu1104' in info)#改info['stu1101'] = '武藤兰'#增,当key值不存在的时候会增加info['stu1104'] ='Cangjingkong'print(info)#删除 del是python中的一个通用方法del info['stu1101']print(info)#删除,pop删除,info.pop('stu1102')print(info)#删除,popitem,随机删除info.popitem()print(info)#更新update,b = {    'stu1101':'Felix',    1:3,    2:5}info.update(b) #合并两个字段,有交叉则更新,没有则创建print(info)#fromkeys与info没什么关系,初始化一个列表,这个地方有个坑c = info.fromkeys([6,7,8],[1,{
'name':'alex'},444]) #相当于创建了一个字典print(c)c[7][1]['name'] = 'Fiona'#修改的时候会把fromkeys值都修改,类似于一个浅copyprint(info.items()) #将字典变成了大的列表
基本操作
#字典可以多级嵌套字典China ={    '北京':{        '昌平':{            '沙河':['oldboy','test'],            '天通苑':['链家地产','我爱我家'],        },        '朝阳':{            '望京':['奔驰','陌陌'],            '国贸':['CICC','HP'],            '东直门':['Adent','wwo']        },     '广东':{        '东莞':{},        '佛山':{},        '广州':{},    },    }}#修改东直门下的公司名称(key尽量不要写中文)China['北京']['朝阳']['东直门'][1] = 'Kaitong'print(China)#打印所有不包含key的值print(China.values())#打印所有key值print(China.keys())#setdefault 如果字典不存在可以新增,存在则返回key所对应的值China.setdefault('陕西',{
'宝鸡':{}})China.setdefault('北京',{})print(China)print(China.setdefault('北京',{}))
多级嵌套
#pycharm 5.0.3(python3.6)info = {    'stu1101':'TengLan Wu',    'stu1102':'LonZe Luola',    'stu1103':'XiaoZe Maliya',        }for i in info:    print(i) #只是打印了keyfor i in info:    print(i,info[i]) #打印key和value,建议的循环方式#上边的效果和下边的一致,但是上边的效果高,因为有一个字典转变为列表的过程for k,v in info.items():    print(k,v)
字典的循环

 

4.集合操作练习

#pycharm 5.0.3(python3.6)#定义列表,集合;列表转变为集合的方式就是用set()框起来list_1 = [20,1,4,5,7,3,6,7,9]list_1 = set(list_1)list_2 = set([2,6,0,66,22,8,4])print(list_1,type(list_1))print(list_2,type(list_2))#交集print('交集:',list_1.intersection(list_2))print('交集运算符',list_1 & list_2)#并集print('并集:',list_1.union(list_2))print('并集运算符:',list_1 | list_2)#差集print('差集(1有2没有):',list_1.difference(list_2))print('差集(2有1没有)',list_2.difference(list_1))print('差集运算符(1有2没有)',list_1 - list_2)print('差集运算符(2有1没有)',list_2 - list_1)list_3 = set([1,3,7])#子集 (前边的是不是后边的子集或者父集),子集没有专门的运算符print('子集(1是不是2的子集):',list_1.issubset(list_2))#父集print('父集(1是不是2的父集):',list_1.issuperset(list_2))print('子集(1是不是3的子集):',list_1.issubset(list_3))print('父集(1是不是3的父集):',list_1.issuperset(list_3))#对称差集(反向差集):把两个都有的去掉print('对称差集',list_1.symmetric_difference(list_2))print('对称差集运算符',list_1 ^ list_2)print('遗漏'.center(50,'#'))#判断两个是否有交集,有返回fase,没有返回truelist_4 = set([5,6,8])print(list_4.isdisjoint(list_3))print(list_1.isdisjoint(list_2))#pop 任意删除一个,并返回一个值print('删除任意一个并返回其值:',list_1.pop())print('删除任意一个并返回其值:',list_1.pop())#discard删除一个值,如果值有则删除,如果没有返回空不报错,remove会报错list_1.discard(7) #discard删除一个值print('discard删除一个值后list_1结果:',list_1)list_1.discard(1000)#删除一个不存在的值,这里什么也不做也不会报错print('discard删除一个值list_1结果::',list_1)print('集合的增删改查'.center(30,'-'))#增加list_1.add(2000)print('增加一个:',list_1)#增加多项list_1.update([20,40,555])print('增加多个:',list_1)#删除,值不存在的时候会报错list_1.remove(2000)print('移除:',list_1)#长度判断print('长度',len(list_1))#成员判断:判断20是否在list_1中print('成员判断:',20 in list_1)print('成员判断:',1000 not in list_1)#copy:浅复制
集合代码

 

5.文件操作

#pycharm 5.0.3(python3.6)#文件的打开、读写操作#读:'''f = open('yesterday2','r',encoding='utf-8') #打开文件 (此处如果不加编码格式,windows默认编码是gbk,而python默认是utf8#的)所以需要指定编码用utf-8打开文件data = f.read() #文件打开了只是一个内存对象,所以需要赋变量的形式进行操作data2 = f.read() #上边读完了,此时在读的话是从末行开始读,所以这里读的内容是空的。print(data)print('data2:',data2) #打印内容为空理解(读文件的时候相当于是有个光标的东东,python会记录光标的位置,我们要想从任意位置#读取的话就可以通过操作光标实现)'''#写'''f = open('yesterday2','w',encoding='utf-8') #写的话需要在open中加上打开文件的模式'w'(默认读模式)f.write('I love you Fiona,\n') #open模式中只写‘w’相当于是创建一个文件*慎用*,会把原文件清空f.write('very much')  #第一行内容不带\n的话会写在同一行''''''#'a' 追加的话需要在open中加上打开文件的模式(默认读模式),相当于append(在末尾增加)f = open('yesterday2','a',encoding='utf-8')f.write('hahhhhhhh\n')f.write('luhaluhaluha')f.close() #写完文件要把文件关闭'''#读2行'''#readlin默认读文件中的一行f = open('yesterday','r',encoding='utf-8')print(f.readline())print(f.readline())'''#读5行,可以用循环'''f = open('yesterday','r',encoding='utf-8')for i in range(5):    print(f.readline().strip()) #strip可以去除两边的换行和空格'''#需求:读多行,readlines读所有的文件,在第10行的位置打印一个分割线'''f = open('yesterday','r',encoding='utf-8')#print(f.readlines()) #读所有的行放到一个列表#print(list(enumerate(f.readlines())))#解决:通过for循环可以把这个列表的数据取出来,通过enumerate将列表的下标和值存成元组形式,然后在赋两个值for index,line in enumerate(f.readlines()):     if index ==9:         print('我是分割线')         continue     print(line.strip())'''#需求,readlines只适合读小文件,读大文件怎么办 :读一行删一行,内存只存一行#此时文件变成了一个迭代器,无法通过枚举取下标了'''f = open('yesterday','r',encoding='utf-8')count = 0for line in f:    if count == 9:        print('我是分割线')        count += 1        continue    print(line)f.close()'''
文件操作
#pycharm 5.0.3(python3.6)#需求:怎么将光标移动,获取想要打印的内容呢?f = open('yesterday','r',encoding='utf-8')print(f.tell()) #打印光标位置 ,按字符的个数计数print(f.readline())print(f.readline())print(f.readline())print('总共读了几个字符:',f.tell())print('光标返回到第几个字符:',f.seek(0)) #一般是0,回到头,像tty等设备是无法移动print(f.readline())print('判断光标是否可移动:',f.seekable())print('打印文件的编码:',f.encoding)print('反应文件句柄在内存的编号:',f.fileno()) #返回文件句柄在内存中的编号print('打印文件名称:',f.name)print('是不是终端设备:',f.isatty())print('判断文件是否可读:',f.readable())print('判断文件是否可写:',f.writable())print('强制刷新:',f.flush()) #将缓存中的数据立马写入硬盘,系统默认会等到缓存满了才写到硬盘中print('判断文件是否关闭:',f.closed)print('关闭文件',f.close())print('判断文件是否关闭:',f.closed)#print('清空',f.truncate()) 打开文件模式‘a’ 从头开始截断,
基本操作
#进度条实现import  sys,time #导入系统和时间模块for i in range(20):    sys.stdout.write('#')    sys.stdout.flush() #刷到内存上    time.sleep(0.1) #隔01秒打印1次
进度条
#pycharm 5.0.3(python3.6)#文件的读写'''f = open('yesterday','r+',encoding='utf-8')print(f.readline())print(f.readline())print(f.readline())f.write('====================')#只能写到最后print(f.readline())'''#文件的写读'''f = open('yesterday3','w+',encoding='utf-8')f.write('=========wo==========\n')f.write('=========wo==========\n')f.write('=========wo==========\n')f.write('=========wo==========\n')print(f.tell())f.seek(10)print(f.readline())f.write('ninini') #只能写在末尾,与硬盘存储机制有关f.close()'''#追加读 a+#以二进制方式读[FTP传输、网络传输、视频文件]'''f = open('yesterday3','rb')print(f.readline())'''#以二进制方式写f = open('yesterday3','wb')f.write('hello world\n'.encode())f.closed#追加二进制,ab
文件的修改
#pycharm 5.0.3(python3.6)#方式一、vim的方式,将文件全部加载到内存,然后全部保存到内存中#方式二、修改好以后写到新的文件# (边读边写),需要打开两个文件f = open('yesterday','r',encoding='utf-8')f_new = open('yesterday.bak','w',encoding='utf-8')for line in f:    if 'me' in line:        line = line.replace('me','Felix')    f_new.write(line)f.closed()f_new.closed()
文件的修改2

 

四、参考

http://www.cnblogs.com/apff/p/7455410.html

http://www.cnblogs.com/alex3714/articles/5717620.html  <博主博客记录>

http://www.runoob.com/

注:本笔记基于“老男孩python14期百度传课视频”,地址:https://chuanke.baidu.com/v3628575-182242-1134376.html

转载于:https://www.cnblogs.com/apff/p/7467937.html

你可能感兴趣的文章
【bzoj1029】[JSOI2007]建筑抢修
查看>>
synchronized
查看>>
迭代器和生成器
查看>>
codevs 1080 线段树练习
查看>>
[No0000195]NoSQL还是SQL?这一篇讲清楚
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
Python-Web框架的本质
查看>>
QML学习笔记之一
查看>>
Window 的引导过程
查看>>
App右上角数字
查看>>
从.NET中委托写法的演变谈开去(上):委托与匿名方法
查看>>
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>