1、 列表的操作
(1)切片
>>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] >>> names[1:4] #取下标1至下标4之间的数字,包括1,不包括4 ['Tenglan', 'Eric', 'Rain'] >>> names[1:-1] #取下标1至-1的值,不包括-1 ['Tenglan', 'Eric', 'Rain', 'Tom'] >>> names[0:3] ['Alex', 'Tenglan', 'Eric']
(2)追加
>>> names.append("我是新来的")
>>> names ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy'] >>> b = [1,2,3] >>> names.extend(b) >>> names ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
(3)插入
>>> names ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的'] >>> names.insert(2,"强行从Eric前面插入") >>> names ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
(4)修改
>>> names ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的'] >>> names[2] = "该换人了"(5)删除
>>> del names[2] >>> names ['Alex', 'Tenglan', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的'] >>> del names[4] >>> names ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的'] >>> >>> names.remove("Eric") #删除指定元素 >>> names ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', '我是新来的'] >>> names.pop() #删除列表最后一个值(6)统计
>>> names ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3] >>> names.count("Amy") 2(7)排序与反转>>> names ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3] >>> names.sort() #排序 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unorderable types: int() < str() #3.0里不同数据类型不能放在一起排序了,擦>>> names.reverse() #反转 >>> names ['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1'](8)获取下标>>> names ['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1'] >>> names.index("Amy")
2字符串操作
name.capitalize() 首字母大写 name.casefold() 大写全部变小写 name.center(50,"-") 输出 '---------------------Alex Li----------------------' name.count('lex') 统计 lex出现次数 name.encode() 将字符串编码成bytes格式 name.endswith("Li") 判断字符串是否以 Li结尾 "Alex\tLi".expandtabs(10) 输出'Alex Li', 将\t转换成多长的空格 name.find('A') 查找A,找到返回其索引, 找不到返回-1字符串格式化输出
1234name
=
"alex"
"i am %s "
%
name
#输出: i am alex
format : >>> msg = "my name is {}, and age is {}" >>> msg.format("alex",22) 'my name is alex, and age is 22' >>> msg = "my name is {1}, and age is {0}" >>> msg.format("alex",22) 'my name is 22, and age is alex' >>> msg = "my name is {name}, and age is {age}" >>> msg.format(age=22,name="ale") 'my name is ale, and age is 22' format_map >>> msg.format_map({'name':'alex','age':22}) 'my name is alex, and age is 22' msg.index('a') 返回a所在字符串的索引 '9aA'.isalnum() True '9'.isdigit() 是否整数 name.isnumeric name.isprintable name.isspace name.istitle name.isupper "|".join(['alex','jack','rain']) 'alex|jack|rain'
maketrans >>> intab = "aeiou" #This is the string having actual characters. >>> outtab = "12345" #This is the string having corresponding mapping character >>> trantab = str.maketrans(intab, outtab) >>> >>> str = "this is string example....wow!!!" >>> str.translate(trantab) 'th3s 3s str3ng 2x1mpl2....w4w!!!' msg.partition('is') 输出 ('my name ', 'is', ' {name}, and age is {age}') 分割 >>> "alex li, chinese name is lijie".replace("li","LI",1) 'alex LI, chinese name is lijie' msg.swapcase 大小写互换 >>> msg.zfill(40) '00000my name is {name}, and age is {age}' >>> n4.ljust(40,"-") 'Hello 2orld-----------------------------' >>> n4.rjust(40,"-") '-----------------------------Hello 2orld' >>> b="ddefdsdff_哈哈" >>> b.isidentifier() #检测一段字符串可否被当作标志符,即是否符合变量命名规则 True字典操作
字典的特性:
- dict是无序的
- key必须是唯一的,so 天生去重
增加
>>> info["stu1104"] = "苍井空" >>> info {'stu1102': 'LongZe Luola', 'stu1104': '苍井空', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
修改
>>> info['stu1101'] = "武藤兰" >>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1101': '武藤兰'}删除
>>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1101': '武藤兰'} >>> info.pop("stu1101") #标准删除姿势 '武藤兰' >>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'} >>> del info['stu1103'] #换个姿势删除 >>> info {'stu1102': 'LongZe Luola'} >>> >>> >>> >>> info = {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'} >>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'} #随机删除 >>> info.popitem() ('stu1102', 'LongZe Luola') >>> info {'stu1103': 'XiaoZe Maliya'}查找
>>> info = {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'} >>> >>> "stu1102" in info #标准用法 True >>> info.get("stu1102") #获取 'LongZe Luola' >>> info["stu1102"] #同上,但是看下面>>> info.values() dict_values(['LongZe Luola', 'XiaoZe Maliya']) #keys >>> info.keys() dict_keys(['stu1102', 'stu1103']) #setdefault >>> info.setdefault("stu1106","Alex") 'Alex' >>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'} >>> info.setdefault("stu1102","龙泽萝拉") 'LongZe Luola' >>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'} #update >>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'} >>> b = {1:2,3:4, "stu1102":"龙泽萝拉"} >>> info.update(b) >>> info {'stu1102': '龙泽萝拉', 1: 2, 3: 4, 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'} #items info.items() dict_items([('stu1102', '龙泽萝拉'), (1, 2), (3, 4), ('stu1103', 'XiaoZe Maliya'), ('stu1106', 'Alex')])循环dict
#方法1 for key in info: print(key,info[key]) #方法2 for k,v in info.items(): #会先把dict转成list,数据里大时莫用 print(k,v).集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
常用操作
s = set([3,5,9,10]) #创建一个数值集合 t = set("Hello") #创建一个唯一字符的集合 a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中) 基本操作: t.add('x') # 添加一项 s.update([10,37,42]) # 在s中添加多项 使用remove()可以删除一项: t.remove('H') len(s) set 的长度 x in s 测试 x 是否是 s 的成员 x not in s 测试 x 是否不是 s 的成员 s.issubset(t) s <= t 测试是否 s 中的每一个元素都在 t 中 s.issuperset(t) s >= t 测试是否 t 中的每一个元素都在 s 中 s.union(t) s | t 返回一个新的 set 包含 s 和 t 中的每一个元素 s.intersection(t) s & t 返回一个新的 set 包含 s 和 t 中的公共元素 s.difference(t) s - t 返回一个新的 set 包含 s 中有但是 t 中没有的元素 s.symmetric_difference(t) s ^ t 返回一个新的 set 包含 s 和 t 中不重复的元素 s.copy() 返回 set “s”的一个浅复制
文件操作的基本操作
12345678f
=
open
(
'lyrics'
)
#打开文件
first_line
=
f.readline()
(
'first line:'
,first_line)
#读一行
(
'我是分隔线'
.center(
50
,
'-'
))
data
=
f.read()
# 读取剩下的所有内容,文件大时不要用
(data)
#打印文件
f.close()
#关闭文件
打开文件的模式有:
- 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
with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
123with
open
(
'log'
,
'r'
) as f:
...
如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:
12with
open
(
'log1'
) as obj1,
open
(
'log2'
) as obj2:
pass
首先第一步,打开文件,有两个函数可供选择:open() 和 file()
①. f = open('file.txt',‘w’)
...
file.close()
②. f = file('file.json','r')
...
file.close() #记得打开文件时最后不要忘记关闭!
open() 和 file() 都是python的内建函数,返回一个文件对象,具有相同的功能,可以任意替换。使用语法为:
f = open(fileName, access_mode='r', buffering=-1)
第1个参数是文件名, 2,3参数有默认值,参数2 决定了是以读的方式‘r’ ?还是写的方式‘w’ ?抑或别的方式打开文件。
打开的方式有:
r —— 读 ; w —— 写 ; a —— 追加,从EOF开始写,即在文件末尾写
r+ w+ a+ —— 都是以读写方式打开
rb —— 二进制 读 ; wb —— 二进制 写 ;rb+ wb+ ab+ —— 二进制读写
例子:
fp = open('C:\Users\MPC\Desktop\说明.txt') # 默认以读的方式打开
fp = open('test.txt','w')# 写方式打开
fp = open('data.json','a')#追加方式打开
第二步,对文件进行操作
当得到文件对象这个句柄以后(如例子中的fp),就可对文件进行操作了。
文件对象的内建操作方法有:输入,输出,文件内移动,以及杂项操作
1. 输入
函数: read(),readline(),readlines()
将文件中的内容读入 到 一个字符串变量/列表 中
read() : 读取整个文件到字符串变量中
例子:
fp = open('C:\Users\MPC\Desktop\说明.txt')
all_file = fp.read()
read()有一个可选的size参数,默认为-1,表示文件将会被读至末尾(EOF)
readline() :读取打开文件中的一行,然后返回整行包括行结束符到 字符串变量中
readline()也有一个可选的参数size,默认-1,表示读至行结束符停止
readlines() : 读取整个文件,返回一个 字符串列表 ,列表中的每个元素都是一个字符串,代表一行
例子:
fp = open('C:\Users\MPC\Desktop\说明.txt')
lines = fp.readlines()
for line in lines:
...
fp.close()
或者 第2 3 行 简写为:for line in fp.readlines():
在python2.3之后由于迭代器和文件迭代(即文件对象成为了他们自己的迭代器)的引入,
上例有一种更高效的实现方式:
fp = open('C:\Users\MPC\Desktop\说明.txt')
for line in fp:
...
fp.close()
推荐使用这种方法!
2. 输出
函数:write() , writelines()
将字符串/列表 输出到文件中
write() : 将字符串输出到文件
>>>f= open('test.txt','w')
>>>f.write('Helloworld!')
>>>f.close()
>>>f= open('test1.txt','w')
>>>f.write('Welcome\nto\n China!')
>>>f.close()
>>>f= open('test1.txt','w')
>>>f.write('Welcome\nto\n China!')
>>>f.close()
writelines(): 将字符串列表 写入 文件,注意行结束符并不会自动被加入,如果需要,必须手动在每行的结尾加入行结束符。
什么意思呢? 看下例:
>>>s= ['你好','伙计']
>>>f= open('test.txt','w')
>>>f.writelines(s)
>>>f.close()
>>>s= ['你好\n','伙计']
>>>f= open('test.txt','w')
>>>f.writelines(s)
>>>f.close()
>>>f = open(r'I:\python\test.txt','w')
>>>f.write('First line\n')
>>>f.write('Second line\n')
>>>f.write('Third line\n')
>>>f.close()
>>>lines = list(open(r'I:\python\test.txt'))
>>>lines
['Firstline\n', 'Second line\n', 'Third line\n']
>>>first,second,third = open(r'I:\python\test.txt')
>>>first
'Firstline\n'
>>>second
'Secondline\n'
>>>third
'Thirdline\n'
3. 文件内移动
函数: seek() tell()
seek() :移动文件读取指针到制定的位置
tell(): 返回文件读取指针的位置
seek()的三种模式:
(1)f.seek(p,0) 移动当文件第p个字节处,绝对位置
(2)f.seek(p,1) 移动到相对于当前位置之后的p个字节
(3)f.seek(p,2) 移动到相对文章尾之后的p个字节