常见数据以及处理文件处理
可变与不可变类型(六者又有什么区别)
#1. 可变类型:值改变,但是id不变,证明就是在改变原值,是可变类型
#2. 不可变类型:值改变,但是id也跟着变,证明是产生了新的值,是不可变类型
#字符串:在存储上类似字符数组,也就是内部是各个字符,所以它每一位的单个元素都是可以提取的 字符床是描述状态的数据类型
#列表:存放各种数据类型,内部元素可变
#元组:内部元素不可变
#字典:查找快,容量也大
#集合:内部元素
什么是与用户交互
程序等待用户输入数据,然后程序执行结束后根据输入内容为用户反馈信息
为何程序要与用户交互:
为了让计算机像人一样能与用户交互
如何用:
python2 中有raw_input 和input ,前者把输入内容为字符串,input 则需要一个明确的数据类型
python3 只有input
1.数字(不可变)
[ 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
方法:int 、 float
在python里int为整形 float为浮点型即带小数点的数
#二进制,十进制,八进制,十六进制
2. 字符串(不可变)
全部方法
'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format',
'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric',
'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans',
'partition', 'replace', 'rfind',
'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split',
'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate',
'upper', 'zfill'
常见操作:数据类型转换、取值、切片、循环
常见函数:len strip split ,rsplit replace isdigit (find,-1 index 报错 rfind,rindex) count (center,ljust,rjust,zfill)
isdigit 只能识别 bytes 和 1
isdecimal 只能识别 1
isnumeric :中文 1 罗马
优先掌握的操作:
**#1、按索引取值(正向取+反向取) :只能取
#2、切片
#3、长度len
#4、成员运算in和not in
#5、移除空白strip
#6、切分split
#7、循环
# 切片 strip (去掉开头结尾某个字符)
#strip
如果是abc 去掉a或者b或者c或者abc
name='*egon**'
name.strip('*'))
name.lstrip('*'))
name.rstrip('*'))
# 字母大小写变化 #lower小写upper大写
#lower,upper
name='egon'
print(name.lower())
print(name.upper())
# 判断是否以什么开头 startswith,endswith
name='alex_SB'
print(name.endswith('SB'))
print(name.startswith('alex'))
# split ()分割和partition
partition将一个字符串分割三部分(“左侧内容”,”seq“,"右侧")
name='root:x:0:0::/root:/bin/bash'
print(name.split(':')) #默认分隔符为空格
name='C:/a/b/c/d.txt' #只想拿到顶级目录
print(name.split('/',1))
name='a|b|c'
print(name.rsplit('|',1)) #从右开始切分
join (每个元素后面加上指定字符 #可迭代对象每个必须都是字符串)
tag=’ ’
print(tag.join([‘egon’,‘say’,‘hello’,‘world’]))
#replace
name=‘alex say :i have one tesla,my name is alex’
print(name.replace(‘alex’,‘SB’,1))
sdigit 可以判断bytes和unicode类型,是最常用的用于于判断字符是否为"数字"的方法
age=input(’>>: ')
print(age.isdigit())
字符串的其他操作
```python
#1、find,rfind,index,rindex,count
#2、center,ljust,rjust,zfill
#3、expandtabs
#4、captalize,swapcase,title
#5、is数字系列
#6、is其他
find,rfind,index,rindex,count 在字符串的一个范围内里寻找每个字符
name='egon say hello'
name.find('o',开始的索引,结束的索引)) 找不到返回-1 结束索引没有限制
name.index('e',2,4)) #同上,但是找不到会报错
name.count('e',1,3))如果不指定范围则查找所有
center 剧中填充,ljust左剧中填充,rjust右居中填充,zfill用0填充,
name='egon'
**用某个字符 填充字符串**
name.center(30,'-')
# 左居中
name.ljust(30,'*')
name.rjust(30,'*')
print(name.zfill(50)) #用0填充
# expandtabs 如何让字符串里的\t 转换成指定数量空格默认为8
name='egon\thello'
print(name.expandtabs(1))
# captalize,swapcase,title (#如何让首字母大写)
print(name.capitalize())
print(name.swapcase()) #字符串转换大小写
msg=‘egon say hi’
print(msg.title()) #让字符串里的每个单词的首字母大写
#is数字系列
#在python3中
num1=b'4' #bytes
num2=u'4' #unicode,python3中无需加u就是unicode
num3='四' #中文数字
num4='Ⅳ' #罗马数字
'''
#isdigt:bytes,unicode
print(num1.isdigit()) #True
print(num2.isdigit()) #True
print(num3.isdigit()) #False
print(num4.isdigit()) #False
'''
#isdecimal:uncicode
#bytes类型无isdecimal方法
print(num2.isdecimal()) #True
print(num3.isdecimal()) #False
print(num4.isdecimal()) #False
'''
#isnumberic:unicode,中文数字,罗马数字
#bytes类型无isnumberic方法
print(num2.isnumeric()) #True
print(num3.isnumeric()) #True
print(num4.isnumeric()) #True
'''
#三者不能判断浮点数
num5='4.3'
print(num5.isdigit())
print(num5.isdecimal())
print(num5.isnumeric())
'''
总结:
最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
如果要判断中文数字或罗马数字,则需要用到isnumeric
'''
#is其他
print('===>')
name='egon123'
print(name.isalnum()) #字符串由字母或数字组成
print(name.isalpha()) #字符串只由字母组成
print(name.isidentifier())
print(name.islower())
print(name.isupper())
print(name.isspace())
print(name.istitle())
4. 列表(可变)
方法大全
[ 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse',
'sort']
常见操作:数据类型转换、索引取值(超过索引赋值会报错)、切片、循环
常见函数:len (in和not in ) append与insert del和remove pop clear() extend reverse
#优先掌握的操作:
#1、按索引存取值(正向存取+反向存取):即可存也可以取
#2、切片(顾头不顾尾,步长)
#3、长度
#4、成员运算in和not in
#5、追加
#6、删除
#7、循环
5. 元组(不可变)
‘count’, ‘index’
Python的元组与列表类似,不同之处在于元组的元素不能修改。
6. 字典(取值速度快)
#优先掌握的操作:
#1、按key存取值:可存可取
#2、长度len
#3、成员运算in和not in
#4、删除
#5、键keys(),值values(),键值对items()
#6、循环
funcs:
'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'
#利用setdefault解决重复赋值
’
setdefault的功能
1:key存在,则不赋值,key不存在则设置默认值
2:key存在,返回的是key对应的已有的值,key不存在,返回的则是要设置的默认值
d={}
print(d.setdefault('a',1)) #返回1
d={'a':2222}
print(d.setdefault('a',1)) #返回2222
'''
s='hello alex alex say hello sb sb'
避免报错:1.Thomas' in d 2.d.get('Thomas',-1))
d.get('Thomas',-1) 可以自己规定返回值
7. 集合
# 每个元素必须是不可变类型(可hash,可作为字典的key)
#优先掌握的操作:
#1、长度len
#2、成员运算in和not in
#3、|合集
#4、&交集
#5、-差集
#6、^对称差集
#7、==
#8、父集:>,>=
#9、子集:<,<=
集合在s=[1,2,5,7,2,1,3,4]
print(set(s)) 的时候会有从小到大的排序,可是集合明明是无序的,可以说集合有排序吗
虽然显示从小到大排序,但打印结果取决于其内部存储结构和输出方式,且set没有sort方法
8. 数据类型总结
按存储空间的占用分(从低到高)
数字
字符串
集合:无序,即无序存索引相关信息
元组:有序,需要存索引相关信息,不可变
列表:有序,需要存索引相关信息,可变,需要处理数据的增删改
字典:无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改
按存值个数区分
标量/原子类型 数字,字符串
容器类型 列表,元组,字典
按可变不可变区分
可变 列表,字典
不可变 数字,字符串,元组
按访问顺序区分
直接访问 数字
顺序访问(序列类型) 字符串,列表,元组
key值访问(映射类型) 字典
9. 文件处理
有时我们需要把数据永久存储起来,随时使用随时读取,例如我们在程序开始需要把文件里的内容读取出来,而程序无法直接操作底层硬件读取外存,我们需要调用操作系统的文件方法来操作,在python中这个给操作系统发指令的就是文件对象open
使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法 如果需要保证文件被及时关闭推荐使用with: 如果不关闭会在垃圾回收机制的时候自动回收,而什么时候回收未确定,缓存的信息可能会意外丢失。文件可能会损坏。
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
文件都必须是有权限被修改的,如果操作系统取消了读写权限,那么文件将无法被读写
- file: 必需,文件路径(相对或者绝对路径)。
- mode: 可选,文件打开模式
- buffering: 设置缓冲
- encoding:一般使用utf8
- errors: 报错级别
- newline: 区分换行符
- closefd: 传入的file参数类型
- opene额
额
mode 参数有:
模式 | 描述 |
---|---|
r | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式 一般用于读取非文本文件如图片等。 |
+ | 打开一个文件进行更新(可读可写) |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | rb+和 r+ 不做详解 |
rb+ | |
w | 存在开始重头编译 不存在开始 ,创建新文件。 |
wb | w+ wb+ |
a | 如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 |
file 对象
方法 | 功能 |
---|---|
file.close() | 关闭文件。关闭后文件不能再进行读写操作 |
file.flush() | 一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法 |
file.next() | 返回文件下一行。 |
file.read([size]) | 从文件读取指定的字节数,如果未给定或为负则读取所有 |
file.readlines([sizeint]) | 读取整行,包括 “\n” 字符。 |
file.readline([size]) | 返回值为列表,存放每一行数据 ==若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。 |
file.seek(offset[, whence]) | offset 设置指针位置 ----如果是负数表示从倒数第几位开始。whence 开始位置(0 开头 1 当前位置 2 末尾)什么都不操作的时候智能使用0 |
file.tell() | 返回文件当前位置。 |
file.truncate([size]) | 从文件的开始截断,截断文件为 size个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小 |
file.tell() | 返回文件当前位置。 |
file.write(str) | 将字符串写入文件,返回的是写入的字符长度。 |
file.writelines(sequence) | 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符 不加的话会放在一行 |
10.算术运算符
1.算术运算符(加减乘除)
2.比较运算符
字符串怎么比大小
“abcd” > “cdef”
他会逐步逐个来比较acicc码 先比较 a和c 发现c比a 大不比较 所以 “abcd” > “cdef” Flase
列表也是一样
[1,2,3,4,“ab”]>[1,2,3,4,“ba”] 也是flase
[‘1’,2,3,4,“ab”]>[1,2,3,4,“ba”] 字符串1 和 整数1 无法比较所以报错
如果只想取出前一两个可以使用
a,b,_,f=l
把后的变量转为一个列表
逻辑运算
有优先级 但是只需要加上括号就清晰
赋值运算
解压赋值
l=[1,2,3,4,5,6]
a,b,c,d,e,f=l
左右两边不能多不能少
‘dic={“1”:2,“3”:4}
a,b=dic
abc分别为键 1和 3
11.字符编码
人语》计算机语言的一种媒介