python之二 基础 一

  • 本章节 主要内容
  1. 列表, 元组
  2. 字符串操作

       1. 列表,元组

   列表是最常用的数据类型之一,通过列表可以对数据实现最方便的存储,修改等操作

   定义列表

  name = [ 'zhansan','lisi','wangwu' ]   列表使用的是[ ]中括号 可以增删该差 但是元组不能 ,


 1 通过下标访问列表中的元素,下标从0开始计数
 2  
 3  >>> name[0]
 4  'zhangsan'
 5  
 6  >>> name[1]
 7  'lisi'
 8  >>> name[2]
 9  'wangwu'
10  
11  >>> name[0:1] #下面这些在去下标的时候 顾首不顾尾
12  ['zhangsan']
13  >>> name[0:2]
14  ['zhangsan', 'lisi']
15  >>> name[0:3]
16  ['zhangsan', 'lisi', 'wangwu']
17  
18  这些就称为下标
19  
20  切片:取多个元素
21  >>> name = ['zhangsan','lisi','wangwu','zhaoliu','xiaoqi','xiaojiu']
22  >>> name[1:4]
23  ['lisi', 'wangwu', 'zhaoliu']   #取下标1至下标4之间的数字,包括1,不包括4
24  >>>
25 >>> name[1:-1]
26 ['lisi', 'wangwu', 'zhaoliu', 'xiaoqi'] #取下标1至-1的值,不包括-1
27 >>>
28 >>> name[0:3]
29 ['zhangsan', 'lisi', 'wangwu']
30 >>>
31 >>> name[:3]
32 ['zhangsan', 'lisi', 'wangwu']  #如果是从头开始取,0可以忽略,跟上句效果一样
33 
34 >>> name[3:]
35 ['zhaoliu', 'xiaoqi', 'xiaojiu']  #如果想取到最后可以这样写
36 
37 >>> name[0::2]
38 ['zhangsan', 'wangwu', 'xiaoqi'] #后面的2 代表,每隔一个元素,就取一个
39 >>> name[::2]
40 ['zhangsan', 'wangwu', 'xiaoqi']

 1   追加
 2 
 3 >>> name
 4 ['zhangsan', 'lisi', 'wangwu', 'zhaoliu', 'xiaoqi', 'xiaojiu']
 5 >>> name.append("add")  #会把add添加到列表的后面
 6 >>> name
 7 ['zhangsan', 'lisi', 'wangwu', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add']
 8 
 9   插入
10 
11 >>> name
12 ['zhangsan', 'lisi', 'wangwu', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add']
13 
14 name.insert(2,"insert") #把inster添加到 wangwu前面
15 
16 >>> name
17 ['zhangsan', 'lisi', 'inster', 'wangwu', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add']
18 
19  
20 
21   修改
22 
23 >>> name
24 ['zhangsan', 'lisi', 'inster', 'wangwu', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add']
25 >>> name[1]="wang" #把lisi改成wang
26 >>> name
27 ['zhangsan', 'wang', 'inster', 'wangwu', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add']
28 
29  
30 
31   删除  #删除有三种操作 del, remoce删除指定元素 , pop 删除列表最后一个
32 
33 >>> name
34 ['zhangsan', 'wang', 'inster', 'wangwu', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add']
35 >>> del name[3]
36 >>> name
37 ['zhangsan', 'wang', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add']
38 >>> name.remove("wang")
39 >>> name
40 ['zhangsan', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu', 'add']
41 >>> name.pop()
42 'add'
43 >>> name
44 ['zhangsan', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu']
45 
46  
47 
48   扩展
49 
50 >>> name   
51 ['zhangsan', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu']
52 >>> age=[22,33,44]
53 >>> name.extend(age) #extemd用于扩展
54 >>> name
55 ['zhangsan', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu', 22, 33, 44]
56 
57  
58 
59   拷贝
60 
61 >>> name
62 ['zhangsan', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu', 22, 33, 44]
63 >>>
64 >>> name_copy = name.copy() #name.copy 浅拷贝 只能拷贝一层
65 >>> name_copy
66 ['zhangsan', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu', 22, 33, 44]
67 
68   统计
69 
70 >>> name
71 ['zhangsan', 'inster', 'zhaoliu', 'xiaoqi', 'xiaojiu', 22, 33, 44]
72 >>> name.insert(2,"xiaoqi") #统计列表里面xiaoqi出现的次数
73 >>> name
74 ['zhangsan', 'inster', 'xiaoqi', 'zhaoliu', 'xiaoqi', 'xiaojiu', 22, 33, 44]
75 >>> name.count("xiaoqi")
76 2
77 
78   排序和反转
79 
80 >>> name = ['zhangsan','lisi','wangwu','1','2','3']
81 >>> name.sort()
82 >>> name
83 ['1', '2', '3', 'lisi', 'wangwu', 'zhangsan']
84 >>>
85 >>> name.reverse()
86 >>> name
87 ['zhangsan', 'wangwu', 'lisi', '3', '2', '1']
88 
89  
90 
91   获取下标
92 
93 >>> name
94 ['zhangsan', 'wangwu', 'lisi', '3', '2', '1']
95 
96 >>> name.index('wangwu')
97 1
列表操作

 元组

元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

语法

name=('zhansan','lisi','wangwu')

它只有2个方法,一个是count,一个是index,

 

  2,字符串操作

  1 >>> my = "my love is eat"
  2 >>> print(my.capitalize()) #首字母大写
  3 My love is eat
  4 
  5 >>> print(my.count("a")) #统计有几个a
  6 1
  7 
  8 >>> print(my.endswith("at")) #以什么结尾
  9 True
 10 
 11 
 12 ------------------my love is eat------------------
 13 
 14  
 15 
 16 >>> print(my.find("love")) #切片
 17 3
 18 
 19  
 20 
 21  my2 = "my name is {name} and i am {year} old "
 22 >>> print(my2.format(name='hello',year=22))  #格式化 
 23 my name is nicai and i am 22 old
 24 
 25 >>> print(my2.format_map( {'name':'hello','year':22 } ))  同上  大部分用上面那个
 26 my name is hello and i am 22 old
 27 
 28 ——————————————————————————————————————
 29 
 30 >>> print('123asd'.isalnum()) #有阿里伯数字的显示True
 31 True
 32 
 33 >>> print('123asd'.isalpha()) #纯英文字符就显示True 否则 False
 34 False
 35 
 36  print('12'.isdigit()) #是否是为整数
 37 True
 38 
 39 >>> print('a1A'.isidentifier()) ##标识符 判断是不是一个合格的表示符 是不是一个合法的变量名
 40 True
 41 
 42 >>> print('33'.isnumeric()) #只有数字在里面的时候返回True 小数不行
 43 True
 44 
 45 >>> print(' '.isspace()) #是否是空格
 46 True
 47 
 48 >>> print('My Name Is'.istitle())#是否为title 首字母大写
 49 True
 50 
 51 >>> print('My Name Is'.isupper())#是否全是大写
 52 False
 53 
 54 ——————————————————————————————————————————————
 55 
 56  
 57 
 58 >>> print(''.join(['1','2','3']))
 59 123
 60 >>> print(','.join(['1','2','3']))
 61 1,2,3
 62 
 63 >>> print('+'.join(['1','2','3']))
 64 1+2+3
 65 
 66  
 67 
 68 ——————————————————————————————————————————————
 69 
 70 >>> name = "my name is"
 71 >>> print(name.ljust(50,'*'))
 72 my name is****************************************
 73 >>> print(name.rjust(50,'-'))
 74 ----------------------------------------my name is
 75 
 76  
 77 
 78 ————————————————————————————————————————————
 79 
 80 >>> print('Name'.lower())#把大写变小写
 81 name
 82 >>> print('Name'.upper())#把小写变大写
 83 NAME
 84 
 85 >>> print(' love\n'.lstrip()) #从左边去除空格和者回车
 86 love
 87 
 88 >>> print(' love\n'.rstrip())#从右边去除空格和者回车
 89  love
 90 
 91 >>> print('    love\n'.strip()) #两边去除空格和回车 一般这个用的多
 92 love
 93 
 94 >>> print('love ll '.replace('l','L')) 把 l 全部替换 L
 95 Love LL
 96 >>> print('love ll '.replace('l','L',1))  只替换一个
 97 Love ll
 98 
 99 >>> print('love me'.rfind('e'))  #从左往右 找到最右边的下标
100 6
101 
102 >>> print('love me'.rfind('me'))  
103 5
104 
105 >>> print('lo ve is '.split())#默认按照空格来分成一个列表
106 ['lo', 've', 'is']
107 
108 >>> print('lo ve is '.split('l')) 按照 l 分割
109 ['', 'o ve is ']
110 
111 >>> print('1+2+3+4'.split('+'))
112 ['1', '2', '3', '4']
113 >>> print('1+2+\n3+4'.splitlines())
114 ['1+2+', '3+4']
115 
116 >>> print('Love Is'.swapcase())
117 lOVE iS
118 
119 >>> print('Love Is'.title())
120 Love Is
121 
122 >>> print('love'.zfill(10))
123 000000love
字符串操作

 

  •  字典操作
  • 集合操作
  • 文件操作
  • 字符编码与转码

  3. 字典操作

字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

字段的特性

  dict是无序的

  key必须是唯一的,所以天生去重

语法


info = {
'stu01' : "zhang",
'stu02' : "wang",
'stu03' : "li",
}
print(info)


 
  1   增加
  2 >>> print(info)
  3 {'stu03': 'li', 'stu01': 'zhang', 'stu02': 'wang'}
  4 >>> info["stu04"] = "zhao"
  5 >>> print(info)
  6 {'stu03': 'li', 'stu01': 'zhang', 'stu02': 'wang', 'stu04': 'zhao'}
  7     
  8    修改
  9 >>> info["stu03"] = "liu"
 10 >>> print(info)
 11 {'stu03': 'liu', 'stu01': 'zhang', 'stu02': 'wang', 'stu04': 'zhao'}
 12 
 13    查找
 14 >>> "stu01" in info  #标准用法
 15 True
 16 >>> info.get("stu02") #获取
 17 'wang'
 18 >>> info["stu03"] # 同上 但是
 19 'liu'
 20 >>> info["stu05"]    如果一个可以不存在,就会显示错误
 21 Traceback (most recent call last):
 22   File "<stdin>", line 1, in <module>
 23 KeyError: 'stu05'
 24 
 25     删除
 26 >>> del info["stu01"] #删除
 27 >>> info
 28 {'stu03': 'liu', 'stu02': 'wang', 'stu04': 'zhao'}
 29 
 30 >>> info.pop("stu03") #标准删除
 31 'liu'
 32 >>> info
 33 {'stu02': 'wang', 'stu04': 'zhao'}
 34 
 35 >>> info
 36 {'stu03': 'li', 'stu01': 'zhang', 'stu02': 'wang'}
 37 >>> info.popitem("stu03") #不能这样删除 
 38 
 39 Traceback (most recent call last):
 40   File "<stdin>", line 1, in <module>
 41 TypeError: popitem() takes no arguments (1 given)
 42 
 43 >>> info.popitem() #是随机的不常用
 44 ('stu03', 'li')
 45 >>> info.popitem()
 46 ('stu01', 'zhang')
 47 >>> info
 48 {'stu02': 'wang'}
 49 
 50 
 51   多级字典嵌套及操作
 52 info = {
 53     '北京':{
 54         '昌平':'a123',
 55         '三里屯':'b123',
 56         '不知道了':'c123'
 57     } ,
 58     '上海': {
 59         "浦东":"d123",
 60         "黄埔":"e123",
 61         "没了":"f123"
 62     },
 63     '河北':{
 64         
 65      '邯郸':'g123',
 66     '石家庄':'h123'
 67     }
 68 }
 69 
 70 >>> info
 71 {'北京': {'三里屯': 'b123', '不知道了': 'c123', '昌平': 'a123'}, '河北': {'石家庄': 'h123', '邯郸': 'g123'}, '上海': {'浦 东': 'd123', '黄埔': 'e123', '没了': 'f123'}}
 72 >>> info['河北']['邯郸']
 73 'g123'
 74 
 75 values
 76 >>> info
 77 {'北京': '昌平', '河北': '石家庄', '上海': '浦东'}
 78 >>> info.values()
 79 dict_values(['昌平', '石家庄', '浦东'])
 80 
 81 keys
 82 >>> info.keys()
 83 dict_keys(['北京', '河北', '上海'])
 84 
 85 
 86 update
 87 >>> info
 88 {'北京': '昌平', '河北': '石家庄', '上海': '浦东'}
 89 
 90 >>> b = {1:2,3:4,"hello":"world"}
 91 >>> b
 92 {1: 2, 3: 4, 'hello': 'world'}
 93 >>> info.update(b)
 94 >>> info
 95 {1: 2, 3: 4, 'hello': 'world', '上海': '浦东', '北京': '昌平', '河北': '石家庄'}
 96 
 97 
 98 item
 99 >>> info.items()
100 dict_items([(1, 2), (3, 4), ('hello', 'world'), ('上海', '浦东'), ('北京', '昌平'), ('河北', '石家庄')])
101 >>>
字典操作

循环dic
方法一
info = {
    '北京':"昌平",
    '上海':"浦东",
    '河北':"石家庄"
}
for key in info:   #这个常用
    print(key,info[key])

for k,v in info.items(): #把一个字典变成列表 循环的时候第一个是k,第二个是v 处理大数据时不用这个方法
    print(k,v)

  




  4.集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下
去重,把一个列表变成集合,就自动去重了
关系测试,测试两组数据之前的交集、差集、并集等关系
常用操作

>>> s = set([3,5,6,10])
>>> t = set("Hello")
>>> a = t|s
>>> print(a)
{'e', 3, 5, 6, 10, 'l', 'o', 'h'}
>>> b = t & s
>>> print (b)
set()
>>> c = t ^ s
>>> print (c)
{'e', 3, 5, 6, 10, 'l', 'o', 'h'}
>>> d = t - s
>>> print (d)
{'e', 'o', 'h', 'l'}


基本操作
 1 >>> s = set([3,5,6,10])
 2 >>> t = set("Hello")
 3 
 4 >>> t.add('x')# 添加一项
 5 >>> print(t)
 6 {'e', 'x', 'o', 'H', 'l'}
 7 
 8 >>> s.update([10,37,42])#添加多项
 9 >>> print(s)
10 {3, 37, 5, 6, 10, 42}
11 
12 >>> t.remove('H')
13 >>> print(t)
14 {'e', 'x', 'o', 'l'}
15 
16 len(s)  
17 set 的长度  
18 6
19 x in s  
20 测试 x 是否是 s 的成员  
21   
22 x not in s  
23 测试 x 是否不是 s 的成员  
24   
25 s.issubset(t)  
26 s <= t  
27 测试是否 s 中的每一个元素都在 t 中  
28   
29 s.issuperset(t)  
30 s >= t  
31 测试是否 t 中的每一个元素都在 s 中  
32   
33 s.union(t)  
34 s | t  
35 返回一个新的 set 包含 s 和 t 中的每一个元素  
36   
37 s.intersection(t)  
38 s & t  
39 返回一个新的 set 包含 s 和 t 中的公共元素  
40   
41 s.difference(t)  
42 s - t  
43 返回一个新的 set 包含 s 中有但是 t 中没有的元素  
44   
45 s.symmetric_difference(t)  
46 s ^ t  
47 返回一个新的 set 包含 s 和 t 中不重复的元素  
48   
49 s.copy()  
50 返回 set “s”的一个浅复制
sed 操作

 

1.集合add的使用
s1 = {11,22,33,44,55,}
s1.add(123)
print(s1)
程序运行结果如下:
{33, 11, 44, 22, 55, 123}
 
2.集合difference的使用
s1 = {11,22,33,44,55,}
s2 = {11,22,33,44,}
s = s1.difference(s2)
print(s)
print(s1)
print(s2)
 
程序运行结果如下:
{55}
{33, 11, 44, 22, 55}
{33, 11, 44, 22}
从输出结果可以看出difference不会修改s1 s2集合本身
 
3.集合difference_update的使用
s1 = {11,22,33,44,55}
s2 = {11,22,33,44}
s3 = s1.difference_update(s2)
print(s3)
print(s1)
print(s2)
 
程序运行结果如下:
None
{55}
{33, 11, 44, 22}
从输出结果可以看出集合s1已经被修改
 
4.集合discard的使用
discard:删除集合中指定的元素
s1 = {11,22,33,44,55}
s1.discard(11)
print(s1)
 
程序运行结果如下:
{22,33,44,55}
 
第二种情况:移除集合中不存在的元素(即便元素不存在也不会报错)
s1 = {11,22,33,44,55,}
s1.discard(88)
print(s1)
程序运行结果如下:
{33, 11, 44, 22, 55}
 
5.集合clear的使用
clear:清空集合中所有的元素
 
s1 = {11,22,33,44,55,}
s1.clear()
print(s1)
 
程序运行结果如下:
set()
 
6.集合pop的使用
s1 = {11,22,33,44,55,}
s1.pop()
print(s1)
 
程序运行结果如下:
{11, 44, 22, 55}
 
7.集合remove的使用
 
s1 = {11,22,33,44,55,}
s1.remove(44)
print(s1)
 
程序运行结果如下:
{33, 11, 22, 55}
 
 
如果元素不在集合中,则会报错
s1 = {11,22,33,44,55,}
s1.remove(66)
print(s1)
 
报错信息如下
Traceback (most recent call last):
  File "D:/PythonS13/day3/test.py", line 34, in <module>
    s1.remove(66)
KeyError: 66
 
8.集合intersection的使用
s1 = {11,22,33,44,55}
s2 = {11,22,33,44}
s3 = s1.intersection(s2)
print(s3)
 
程序运行结果如下:
{33, 11, 44, 22}
 
9.集合intersection_update的使用
s1 = {11,22,33,44,55}
s2 = {11,22,33,44}
s1.intersection_update(s2)
print(s1)
 
 
10.集合isdisjoint的使用
s1 = {11,22,33,44,55}
s2 = {11,22,33,44}
s3 = {66,77,88}
s4 = s1.isdisjoint(s2)
s5 = s1.isdisjoint(s3)
print(s4)
print(s5)
 
程序运行结果如下:
False
True
 
11.集合issubset和issuperset的使用
s1 = {11,22,33,44,55}
s2 = {11,22,33,44}
s3 = {66,77,88}
s4 = s2.issubset(s1)
s5 = s1.issuperset(s2)
print(s4)
print(s5)
 
程序运行结果如下:
True
True

 




  3 文件操作

对文件操作流程

打开文件,得到文件句柄并赋值给一个变量

通过句柄对文件进行操作

关闭文件

 

 1 #f = open('file',encoding="utf-8").read()#打开一个文件 不符合正常的编写规范
 2 
 3 f = open('file',encoding="utf-8")#会付给f一个内存对象 也可以叫做文件句柄
 4 
 5 #句柄包含文件的文件名,字符集,大小,内存,还有硬盘上的起始位置 就可以读写了
 6 
 7 data = f.read()
 8 
 9 #在打印第一遍时 从头打印到尾,当在打印第二遍的时候 就直接从尾部开始打印了 所以打引不出来东西
10 
11 data2 = f.read()
12 
13 print('data')
14 
15 print('---------data2-------------',data2)
文件操作一
 1 f = open('file','w',encoding="utf-8") #默认创建一个新文件
 2 f.write("my heart go on,\n") #这样就能写了
 3 f.write(" go on")
 4 #但是 写的模式打开就不能读了 但是如果又想读又想写 可以用a=append 追加
 5 f = open('file','a',encoding="utf-8") #默认创建一个新文件
 6 f.write("my heart go on,\n") 
 7 f.write(" go on")
 8 # 这样可以一行一行的读  #如果要是打印多行的话 这种方法就显得微不足道了
 9 f = open('file','r',encoding="utf-8")
10 print(f.readline())#f.readline的意思是一行
11 如果要是打印多行的话
12 
13 所以可以这样
14 f = open('file','r',encoding="utf-8")
15 for in in range(5):
16   print(f.readline())
文件操作二
 1 除了上面那个还有一个优化的那就是用f.readlines 它的作用就是把文件里面的内容变成列表 ,每一行就是一个元素
 2 格式如下
 3 ['************\n','*********\n'
 4 这样就可以使用下面的循环了
 5 f = open('file','r',encoding="utf-8")
 6 print(f.readline())#f.readline的意思是一行
 7 for index,line in enumerate(f.readlines()):
 8     if index == 9:
 9         print('-----这是第十行-------')
10         continue
11     print(line.strip())
12 #readlines只能使用一小文件 因为他要把文件的所有行读到内存里 显然是处理不了的
文件操作三
为了解决这些问题 可以采用 让他读一行执行一行,读一行执行一行
例子 

f = open('file','r',encoding="utf-8")
count =0
for line in f:
    if count == 9:
        print('--------第十行----------')
        count += 1
        continue
    print(line)
    count +=1
文件操作四
打开文件的模式有:
    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

  

 
posted @ 2016-12-16 02:05  onlylc  阅读(223)  评论(0)    收藏  举报