一、鸡汤

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.clear
names.reverse()#反转
print('反转:',names)
names.insert(3,'4zhang') #插入数字开头的
names.insert(3,'!#woaini') #插入特殊字符开始的
names.sort()#排序
print('排序',names)
names2 = [12,34,5]
names.extend(names2)#将names2并入到name
print('打印合并后的两个列表:',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模块的深copy
names[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则另一个发现也少了50
p1 = person[:]
p2 = person[:]
p1[0]='Felix'
p2[0]='Fiona'
p1[1][1] =50 #公共账号少了50,那么两个人发现都少了50
print(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)) #在变量值中插入一个tab
print('查找,返回值所在的位置',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()) #'是否是阿拉伯数字,如果里边有特殊字符返回false
print('ab'.isalpha())#是否是存英文字符
print('1A'.isdecimal())#是否是十进制
print(''.isdigit())#是否是整数
print('1A'.isidentifier()) #是否是一个合法的标识符 关注变量的命名规则,不符合的则为False
print('A'.islower()) #判断是不是小写
print(''.isnumeric()) #判断是不是一个数字,只识别整数
print(' '.isspace())#是否是空格
print('my name is '.istitle()) #判断一个字符串是不是title,每个首字母大写
print(''.isprintable())#是否可以打印,字符串不用考虑,比如还是tty文件
print('s'.isupper())#判断是不是大写
print('+'.join(['','','','']))#将列表中的字符串用某一个字符连接
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','') # 做映射,可以做随机密码来玩
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(''.rindex(''))#返回子字符串 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在不在,不在就返回False
print('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值都修改,类似于一个浅copy
print(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) #只是打印了key
for 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,没有返回true
list_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 = 0
for 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

笔记--Day2--python基础2的更多相关文章

  1. Day2 - Python基础2 列表、字典、集合

    Python之路,Day2 - Python基础2   本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一, ...

  2. 【笔记】Python基础一 :变量,控制结构,运算符及数据类型之数字,字符串,列表,元组,字典

    一,开发语言介绍 高级语言:Java,C#,Python  ==>产生字节码 低级语言:C,汇编                   ==>产生机器码 高级语言开发效率高,低级语言运行效率 ...

  3. python笔记之python基础

    python基础语法 1.变量命名规则 1).变量必须以字母或者下划线_开头 2).变量可由字母.数字.下划线_组成 3).变量对大小写敏感 2.多行语句 当编写的代码较长,需要换行,可使用 \ 进行 ...

  4. 风变编程笔记(一)-Python基础语法

    第0关  print()函数与变量 1. print()函数print()函数:告诉计算机,把括号的内容显示在屏幕上 # 不带引号 print(1+1) # 让计算机读懂括号里的内容,打印最终的结果 ...

  5. Python之路,Day2 - Python基础2

    def decode(self, encoding=None, errors=None): """ 解码 """ ""& ...

  6. 【学习笔记】Python基础教程学习笔记

    教程视频网盘共享:http://pan.baidu.com/s/1hrTrR5E 03-python基础.if判断 print 输出数据 print("hahahah")----- ...

  7. Python之路,Day2 - Python基础,列表,循环

    1.列表练习name0 = 'wuchao'name1 = 'jinxin'name2 = 'xiaohu'name3 = 'sanpang'name4 = 'ligang' names = &quo ...

  8. Python学习笔记1——Python基础

    一. 数据类型和变量 整数:十六进制用0x前缀和0-9,a-f表示 浮点数:小数,科学计数法:10用e代替:整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(包括除法),浮点数运算则可 ...

  9. Day2 - Python基础2习题集

    1.购物车程序 product_list = [ (), (), (), (), (), (), ] shooping_list = [] salary = input("Input you ...

  10. Day2 python基础学习

    http://www.pythondoc.com/ Python中文学习大本营 本节内容: 一.字符串操作 二.列表操作 三.元组操作 四.字典操作 五.集合操作 六.字符编码操作 一.字符串操作 1 ...

随机推荐

  1. Leetcode:根据身高重建队列

    题目 假设有打乱顺序的一群人站成一个队列. 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数. 编写一个算法来重建这个队列. 注意: 总人数少于11 ...

  2. C# string.Empty

    在C#中,如果赋值一个字符串为空白字符串,我们一般会用“”的形式对字符串进行赋值操作,其实在C#的字符串类String类中,有个专门的常量string.Empty来代表空字符串,可直接在赋值的时候使用 ...

  3. C# ExpandoObject用法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  4. mybatis 日期比较

    entity @JSONField(name="prj_date",ordinal=13,format="yyyy-MM-dd") private Date p ...

  5. setTimeout的异步传输机制

    setTimeout是异步的,在设置完setTimeout后,指定代码会在设定的时间后加入到任务队列,但并不是立即执行,js是单线程语言,所有的代码按顺序执行,即同步执行,同步执行的代码放在执行队列中 ...

  6. B. Batch Sort

    http://codeforces.com/contest/724/problem/B 被坑了,一开始以为如果有一行已经是排好序了,然后有一行需要转换的次数 >= 2的话,那就直接no了. 因为 ...

  7. Spark Mllib里决策树回归分析如何对numClasses无控制和将部分参数设置为variance(图文详解)

    不多说,直接上干货! 在决策树二元或决策树多元分类参数设置中: 使用DecisionTree.trainClassifier   见 Spark Mllib里如何对决策树二元分类和决策树多元分类的分类 ...

  8. android应用开发全程实录-你有多熟悉listview?

    今天给大家带来<android应用开发全程实录>中关于listview和adatper中的部分.包括listview的基本使用,listview的优化等. 我们经常会在应用程序中使用列表的 ...

  9. 提升Java代码质量(二)

    Item5:消除过期对象的引用 JVM为我们实现了GC(垃圾回收)的功能,让我们从手工管理内存中解放了出来,这固然很好,但并不意味着我们就再也不需要去考虑内存管理的事情了;我们用简单的栈实现的例子来解 ...

  10. If people in the communications only think about gains and losses of interest, then the pleasure of knowing each other will cease to exist.

    If people in the communications only think about gains and losses of interest, then the pleasure of ...