数据类型、字符编码、文件处理

可变与不可变类型(六者又有什么区别)

#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)

文件都必须是有权限被修改的,如果操作系统取消了读写权限,那么文件将无法被读写

  1. file: 必需,文件路径(相对或者绝对路径)。
  2. mode: 可选,文件打开模式
  3. buffering: 设置缓冲
  4. encoding:一般使用utf8
  5. errors: 报错级别
  6. newline: 区分换行符
  7. closefd: 传入的file参数类型
  8. opene额

mode 参数有:
模式描述
r文本模式 (默认)。
x写模式,新建一个文件,如果该文件已存在则会报错。
b二进制模式 一般用于读取非文本文件如图片等。
+打开一个文件进行更新(可读可写)
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rbrb+和 r+ 不做详解
rb+
w存在开始重头编译 不存在开始 ,创建新文件。
wbw+ 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.字符编码

人语》计算机语言的一种媒介
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值