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

本文详细介绍了Python中的主要数据类型,包括数字、字符串、列表、元祖、字典和集合等,并提供了丰富的示例代码帮助理解每种数据类型的特性和操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据类型

按存储空间来分

数字

字符串

集合:无序,没有索引相关信息

元祖:有序,有索引相关信息,不可变

列表:有序,有索引相关信息,可变,可以处理数据的增删改

字典:无需,要存key与value映射的相关信息,可变,可以处理数据的增删改


 

 

字符串

#优先掌握的操作:
按索引取值(正向取+反向取) :只能取 切片(顾头不顾尾,步长)
长度len
成员运算in和not in
移除空白strip 切分split
循环
 

 

 

 

 

 Python Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
 
#strip
name='**zhu**'
print(name.strip('*'))      #去掉*
print(name.lstrip('*'))       #只去掉左边*
print(name.rstrip('*'))       #只去掉右边*

#startswith,endswith
name='zhu_zzz'
print(name.endswith('zzz'))   #从尾部匹配zzz
print(name.startswith('zhu'))    #从首部匹配zhu

#replace
name='my name is zhu,zhu has a goodface'    
print(name.replace('zhu','zzz',1))           #zhu替换成zzz,只替换第一个zhu

#format的三种玩法
res='{} {} {}'.format('zhu',18,'male')                                 #egon 18 male
res='{1} {0} {1}'.format('zhu',18,'male')                              #18 egon 18
res='{name} {age} {sex}'.format(sex='male',name='zhu',age=18)          #egon 18 male

#find,rfind,index,rindex,count
name='zhu say hello'
print(name.find('o',1,3)) #顾头不顾尾,找不到则返回-1不会报错,找到了则显示索引
# print(name.index('e',2,4)) #同上,但是找不到会报错
print(name.count('e',1,3)) #顾头不顾尾,如果不指定范围则查找所有


#split
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(['zhu','say','hello','world'])) #可迭代对象必须都是字符串

#center,ljust,rjust,zfill
name='zhu'
print(name.center(30,'-'))      #zhu居中,左右两边-填充,宽度30
print(name.ljust(30,'*'))       #左边zhu,右边被*填充,宽度30
print(name.rjust(30,'*'))       #右边zhu,左边被*填充,宽度30
print(name.zfill(50)) #用0填充,宽度50


#expandtabs
name='zhu\t123'
print(name)
print(name.expandtabs(1))   #zhu和123之间加tab,宽度1

#lower,upper
name='zhu'
print(name.lower())   #全小写
print(name.upper())   #全大写


#captalize,swapcase,title
print(name.capitalize())  #首字母大写
print(name.swapcase())    #大小写翻转
msg='zhu 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=
'zhu123'
print(name.isalnum()) #字符串由字母或数字组成True
print(name.isalpha()) #字符串只由字母组成False

print(name.isidentifier())    #True
print(name.islower())         #True
print(name.isupper())         #False
print(name.isspace())         #False
print(name.istitle())         #False

列表

#优先掌握的操作:

按索引存取值(正向存取+反向存取):即可存也可以取

切片(顾头不顾尾,步长)

长度

成员运算in和not in

追加 删除 循环


 

元祖

#作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读

#定义:与列表类型比,只不过[]换成()

age=(11,22,33,44,55)本质age=tuple((11,22,33,44,55))

 

#优先掌握的操作:

按索引取值(正向取+反向取):只能取

切片(顾头不顾尾,步长)

长度

成员运算in和not in

循环


 

字典

#优先掌握的操作:

按key存取值:可存可取

长度len

成员运算in和not in

删除 键keys(),值values(),键值对items()

循环


 

集合

#作用:去重,关系运算,

#定义集合:
集合:可以包含多个元素,用逗号分割,

集合的元素遵循三个原则:

1:每个元素必须是不可变类型(可hash,可作为字典的key)

2:没有重复的元素

3:无序

注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值 

#优先掌握的操作:

长度len 成员运算in和not in

|合集 &交集 -差集 ^对称差集 ==
>,>= ,<,<= 父集,子集          

 


 

字符编码

       计算机要想工作必须通电,即用‘电’驱使计算机干活,也就是说‘电’的特性决定了计算机的特性。电的特性即高低电平(人类从逻辑上将二进制数1对应高电平,二进制数0对应低电平),关于磁盘的磁特性也是同样的道理。结论:计算机只认识数字

  很明显,我们平时在使用计算机时,用的都是人类能读懂的字符(用高级语言编程的结果也无非是在文件内写了一堆字符),如何能让计算机读懂人类的字符?

 

  必须经过一个过程:

 

  字符--------(翻译过程)------->数字 

 

  这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码

 

  

 

  以下两个场景下涉及到字符编码的问题:

 

  1. 一个python文件中的内容是由一堆字符组成的,存取均涉及到字符编码问题(python文件并未执行,前两个阶段均属于该范畴)

 

  2. python中的数据类型字符串是由一串字符组成的(python文件执行时,即第三个阶段)

 

 


 练习

 

 

 

 Python Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
name = " aleX"
# 1)    移除 name 变量对应的值两边的空格,并输出处理结果
print(name.strip())
# 2)    判断 name 变量对应的值是否以 "al" 开头,并输出结果
print(name.startswith('al'))
False
# 3)    判断 name 变量对应的值是否以 "X" 结尾,并输出结果
print(name.endswith('X'))
True
# 4)    将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
print(name.replace('l','p',1))
# 5)    将 name 变量对应的值根据 “l” 分割,并输出结果。
print(name.split('l'))
# 6)    将 name 变量对应的值变大写,并输出结果
print(name.upper())
# 7)    将 name 变量对应的值变小写,并输出结果
print(name.lower())
# 8)    请输出 name 变量对应的值的第 2 个字符?
print(name[2:3])
# 9)    请输出 name 变量对应的值的前 3 个字符?
print(name[1:4])
# 10)    请输出 name 变量对应的值的后 2 个字符?
print(name[4:2:-1])
# 11)    请输出 name 变量对应的值中 “e” 所在索引位置?
print(name.find('e',3,4))
# 12)    获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
print(name[0:4])

输出结果:
aleX
False
True
 apeX
[
' a''eX']
 ALEX
 alex
l
ale
Xe
3
 ale

 

 Python Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 
#1. 有列表data=['alex',49,[1900,3,18]],分别取出列表中的名字,年龄,出生的年,月,日赋值给不同的变量
data=['alex',49,[1900,3,18]]
print(data[0])
print(data[1])
print(data[2][0])
print(data[2][1])
print(data[2][2])

测试结果:
alex
49
1900
3
18

#2. 用列表模拟队列
a=[]
a.
append('1')
print(a)
a.
append('2')
print(a)
a.
append('3')
print(a)
a.
pop(0)
print(a)
a.
pop(0)
print(a)

# 输入结果:
['1']
[
'1''2']
[
'1''2''3']
[
'2''3']
[
'3']

#3. 用列表模拟堆栈
a=[]
a.
append('1')
print(a)
a.
append('2')
print(a)
a.
append('3')
print(a)
a.
pop(-1)
print(a)
a.
pop(-1)
print(a)

测试结果:
[
'1']
[
'1''2']
[
'1''2''3']
[
'1''2']
[
'1']

#4. 有如下列表,请按照年龄排序(涉及到匿名函数)
l=[
    {
'name':'alex','age':84},
    {
'name':'oldboy','age':73},
    {
'name':'egon','age':18},
]
print(sorted(l,key=lambda a:a['age']))
#http://www.cnblogs.com/zle1992/p/6271105.html

 

转载于:https://www.cnblogs.com/zhujiaxue1987/p/7526133.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值