本文内容:

--------------------------------------

  1. 列表、元组操作
  2. 字符串操作
  3. 字典操作
  4. 集合操作
  5. 文件操作
  6. 字符编码与转码

1. 列表(list)

序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。

Python有6个序列的内置类型,但最常见的是列表和元组。

序列都可以进行的操作包括索引,切片,加,乘,检查成员。

此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。

列表的数据项不需要具有相同的类型

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

  1. list1 = ['physics', 'chemistry', 1997, 2000];
  2. list2 = [1, 2, 3, 4, 5 ];
  3. list3 = ["a", "b", "c", "d"];

与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。

  1. >>> names = ['Shuke',"Jack",'Jone']
  2. >>> names[0]
  3. 'Shuke'
  4. >>> names[2]
  5. 'Jone'
  6. >>> names[-1] # 最后一个元素下标是-1
  7. 'Jone'
  8. >>> names[-2] # 倒数的第二个元素下标是-2
  9. 'Jack
  • 切片

使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符,如下所示:

  1. >>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
  2. >>> names[1:4] #取下标1至下标4之间的数字,包括1,不包括4
  3. ['Tenglan', 'Eric', 'Rain']
  4. >>> names[1:-1] #取下标1至-1的值,不包括-1
  5. ['Tenglan', 'Eric', 'Rain', 'Tom']
  6. >>> names[0:3]
  7. ['Alex', 'Tenglan', 'Eric']
  8. >>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
  9. ['Alex', 'Tenglan', 'Eric']
  10. >>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
  11. ['Rain', 'Tom', 'Amy']
  12. >>> names[3:-1] #这样-1就不会被包含了
  13. ['Rain', 'Tom']
  14. >>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
  15. ['Alex', 'Eric', 'Tom']
  16. >>> names[::2] #和上句效果一样
  17. ['Alex', 'Eric', 'Tom'

切片

  • 追加

描述

append() 方法用于在列表末尾添加新的对象。

语法

append()方法语法:

  1. list.append(obj) #obj -- 添加到列表末尾的对象。
  1. >>> names
  2. ['Shuke', 'Jack', 'Jone']
  3. >>> names.append("Alex") #追加
  4. >>> names
  5. ['Shuke', 'Jack', 'Jone', 'Alex']

追加append()

  • 插入

描述

insert() 函数用于将指定对象插入列表的指定位置。

语法

insert()方法语法:

  1. list.insert(index, obj)      # index -- 对象 obj 需要插入的索引位置,obj -- 要插入列表中的对象。
  1. >>> names
  2. ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
  3. >>> names.insert(2,"强行从Eric前面插入")
  4. >>> names
  5. ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
  6.  
  7. >>> names.insert(5,"从eric后面插入试试新姿势")
  8. >>> names
  9. ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']

插入(insert)

  • 修改

语法

通过索引找到列表中的元素,并修改,使用=等号赋予新值

  1. >>> names
  2. ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
  3. >>> names[2] = "该换人了"
  4. >>> names
  5. ['Alex', 'Tenglan', '该换人了', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']

修改

  • 删除

描述

del 删除列表中指定索引位置的元素。

remove() 函数用于移除列表中某个值的第一个匹配项

pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。

语法

  1. del list[index] # 删除列表中指定索引位置的元素,index --留空表示删除列表。
  2. list.remove(obj)        #obj -- 列表中要移除的对象。
  3. list.pop(obj=list[-1]) # obj -- 可选参数,要移除列表元素的对象。
  1. >>> del names[2]
  2. >>> names
  3. ['Alex', 'Tenglan', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
  4. >>> del names[4]
  5. >>> names
  6. ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
  7. >>>
  8. >>> names.remove("Eric") #删除指定元素
  9. >>> names
  10. ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', '我是新来的']
  11. >>> names.pop() #删除列表最后一个值
  12. '我是新来的'
  13. >>> names
  14. ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']

删除(del/pop/remove)

  • 拷贝

  1. >>> names
  2. ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
  3.  
  4. >>> name_copy = names.copy()
  5. >>> name_copy
  6. ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]

拷贝(copy)

  • 统计

  1. >>> names
  2. ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]
  3. >>> names.count("Amy")
  4. 2

统计(count)

  • 排序和翻转

描述

sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。

reverse() 函数用于反向列表中元素。

语法

sort()方法语法:

  1. list.sort([func]) #func -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
  2. list.reverse() # 没有参数,直接调用方法
  1. """
  2. 注:
  3. 1. python2.x中列表元素可以为数字,字符串,布尔值,None等;
  4. 2. python3.x中列表元素必须为同一种数据类型
  5. """
  6.  
  7. # ========sort()=========
  8. # python2.x
  9. names = ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 123, True, False]
  10. names.sort()
  11. print names # [False, True, 123, 'Alex', 'Amy', 'Rain', 'Tenglan', 'Tom']
  12.  
  13. # python3.x
  14. '''
  15. 执行结果:
  16. Traceback (most recent call last):
  17. File "<input>", line 1, in <module>
  18. TypeError: unorderable types: int() < str()
  19. '''
  20.  
  21. # ========reverse()=========
  22. # python2.x 和 python3.x相同
  23. names = ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy',123, True, False]
  24. names.reverse()
  25. print(names) # [False, True, 123, 'Amy', 'Tom', 'Rain', 'Tenglan', 'Alex']

排序(sort)和翻转(reverse)

  • 获取下标

描述

index() 函数用于从列表中找出某个值第一个匹配项的索引位置。

语法

index()方法语法:

  1. list.index(obj) #obj -- 查找的对象。
  1. >>> names
  2. ['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '', '', '']
  3. >>> names.index("Amy")
  4. 2 #只返回找到的第一个下标

下标index()

  • 列表扩展

描述

extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。

语法

extend()方法语法:

  1. list.extend(seq) # seq -- 元素列表。
  1. >>> names
  2. ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
  3. >>> b = [1,2,3]
  4. >>> names.extend(b)
  5. >>> names
  6. ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]

扩展extend()

列表小结

Python列表脚本操作符

列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表,如下所示:

 
Python 表达式 结果 描述
len([1, 2, 3]) 3 长度
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 组合
['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重复
3 in [1, 2, 3] True 元素是否存在于列表中
for x in [1, 2, 3]: print x, 1 2 3 迭代

函数

  • cmp(list1, list2) 比较两个列表的元素
  • len(list) 列表元素个数
  • max(list) 返回列表元素最大值
  • min(list) 返回列表元素最小值
  • list(seq) 将元组转换为列表

方法

  1. 1. list.append(obj) 在列表末尾添加新的对象
  2. 2. list.count(obj)      统计某个元素在列表中出现的次数
  3. 3. list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
  4. 4. list.index(obj)      从列表中找出某个值第一个匹配项的索引位置
  5. 5. list.insert(index, obj) 将对象插入列表
  6. 6. list.pop(obj=list[-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
  7. 7. list.remove(obj) 移除列表中某个值的第一个匹配项
  8. 8. list.reverse()    反向列表中元素
  9. 9. list.sort([func]) 对原列表进行排序

注: http://www.runoob.com/python/python-lists.html

2. 元组(tuple)

Python的元组与列表类似,不同之处在于元组的元素不能修改,元组又称为是不可变的列表。

元组使用小括号,列表使用方括号。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

语法:

  1. tup1 = ('physics', 'chemistry', 1997, 2000);

创建空元组

  1. tup1 = ();

元组中只包含一个元素时,需要在元素后面添加逗号

  1. tup1 = (50,);

元组运算符

与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。

 
Python 表达式 结果 描述
len((1, 2, 3)) 3 计算元素个数
(1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) 连接
('Hi!',) * 4 ('Hi!', 'Hi!', 'Hi!', 'Hi!') 复制
3 in (1, 2, 3) True 元素是否存在
for x in (1, 2, 3): print x, 1 2 3 迭代

元组索引,截取

因为元组也是一个序列,所以我们可以访问元组中的指定位置的元素,也可以截取索引中的一段元素,如下所示:

元组:

  1. L = ('spam', 'Spam', 'SPAM!')
 
Python 表达式 结果 描述
L[2] 'SPAM!' 读取第三个元素
L[-2] 'Spam' 反向读取;读取倒数第二个元素
L[1:] ('Spam', 'SPAM!') 截取元素

元组内置函数

Python元组包含了以下内置函数

  1. 1. cmp(tuple1, tuple2) 比较两个元组元素。
  2. 2. len(tuple) 计算元组元素个数。
  3. 3. max(tuple) 返回元组中元素最大值。
  4. 4. min(tuple) 返回元组中元素最小值。
  5. 5. tuple(seq) 将列表转换为元组

注: http://www.runoob.com/python/python-tuples.html 

3. 字符串(string)

特性: 不可改变

  1. name.capitalize() 首字母大写
  2. name.casefold() 大写全部变小写
  3. name.center(50,"-") 输出 '---------------------Alex Li----------------------'
  4. name.count('lex') 统计 lex出现次数
  5. name.encode() 将字符串编码成bytes格式
  6. name.endswith("Li") 判断字符串是否以 Li结尾
  7. "Alex\tLi".expandtabs(10) 输出'Alex Li' \t转换成多长的空格
  8. name.find('A') 查找A,找到返回其索引, 找不到返回-1
  9.  
  10. format :
  11. >>> msg = "my name is {}, and age is {}"
  12. >>> msg.format("alex",22)
  13. 'my name is alex, and age is 22'
  14. >>> msg = "my name is {1}, and age is {0}"
  15. >>> msg.format("alex",22)
  16. 'my name is 22, and age is alex'
  17. >>> msg = "my name is {name}, and age is {age}"
  18. >>> msg.format(age=22,name="ale")
  19. 'my name is ale, and age is 22'
  20. format_map
  21. >>> msg.format_map({'name':'alex','age':22})
  22. 'my name is alex, and age is 22'
  23.  
  24. msg.index('a') 返回a所在字符串的索引
  25. '9aA'.isalnum() True
  26.  
  27. '9'.isdigit() 是否整数
  28. name.isnumeric
  29. name.isprintable
  30. name.isspace
  31. name.istitle
  32. name.isupper
  33. "|".join(['alex','jack','rain'])
  34. 'alex|jack|rain'
  35.  
  36. maketrans
  37. >>> intab = "aeiou" #This is the string having actual characters.
  38. >>> outtab = "12345" #This is the string having corresponding mapping character
  39. >>> trantab = str.maketrans(intab, outtab)
  40. >>>
  41. >>> str = "this is string example....wow!!!"
  42. >>> str.translate(trantab)
  43. 'th3s 3s str3ng 2x1mpl2....w4w!!!'
  44.  
  45. msg.partition('is') 输出 ('my name ', 'is', ' {name}, and age is {age}')
  46.  
  47. >>> "alex li, chinese name is lijie".replace("li","LI",1)
  48. 'alex LI, chinese name is lijie'
  49.  
  50. msg.swapcase 大小写互换
  51.  
  52. >>> msg.zfill(40)
  53. '00000my name is {name}, and age is {age}'
  54.  
  55. >>> n4.ljust(40,"-")
  56. 'Hello 2orld-----------------------------'
  57. >>> n4.rjust(40,"-")
  58. '-----------------------------Hello 2orld'
  59.  
  60. >>> b="ddefdsdff_哈哈"
  61. >>> b.isidentifier() #检测一段字符串可否被当作标志符,即是否符合变量命名规则
  62. True

注: http://www.runoob.com/python3/python3-string.html

4. 字典(dict)

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

  1. d = {key1 : value1, key2 : value2 }

键必须是唯一的,但值则不必。

值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

一个简单的字典实例,语法:

  1. info = {
  2. 'stu1101': "TengLan Wu",
  3. 'stu1102': "LongZe Luola",
  4. 'stu1103': "XiaoZe Maliya",
  5. }

  6. dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

  7. dict1 = { 'abc': 456 };
  8. dict2 = { 'abc': 123, 98.6: 37 };

字典的特性:

  • dict是无序的。
  • key必须是唯一的,so 天生去重  (不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住)。
  • 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。

增加

向字典添加新内容的方法是增加新的键/值对

  1. >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
  2. >>> dict['School']='oldboy'
  3. >>> dict
  4. {'Age': 7, 'Name': 'Runoob', 'School': 'oldboy', 'Class': 'First'}

增加

修改

更改key对应的value即可

  1. >>> dict['Name']='Shuke'
  2. >>> dict
  3. {'Age': 7, 'Name': 'Shuke', 'School': 'oldboy', 'Class': 'First'}

修改

删除

  1. del dict['Name'] # 删除键 'Name'
    dict.pop('Name') # 删除键 'Name',返回值为value
    dict.popitem() # 随机删除
    dict.clear() # 删除字典
    del dict # 删除字典
  1. >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
  2. >>> dict.pop("Age") #标准删除
  3. >>> dict
  4. {'Name': 'Runoob', 'Class': 'First'}
  5. >>> del dict['Class'] #删除Class键值对
  6. >>> dict
  7. {'Name': 'Runoob'}
  8.  
  9. >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
  10. >>> dict.popitem() #随机删除
  11. ('Age', 7)
  12. >>> dict
  13. {'Name': 'Runoob', 'Class': 'First'}
  14.  
  15. >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
  16. >>> dict.clear() #清空字典
  17. >>> dict
  18. {}
  19. >>> info
  20. {'stu1104': 'tenglan Wu', 'stu1101': 'TengLan Wu', 'stu1103': 'XiaoZe Maliya', 'stu1102': 'LongZe Luola'}
  21. >>> del info
  22. >>> info
  23. Traceback (most recent call last):
  24. File "<stdin>", line 1, in <module>
  25. NameError: name 'info' is not defined
  26. >>>

删除

查找

  1. >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
  2. >>> "Name" in dict #标准用法
  3. True
  4. >>> dict.get("Age") #获取
  5. 7
  6. >>> dict['Age'] #获取,与get方法有区别
  7. 7
  8. >>> dict['School'] #key不存在会报错
  9. Traceback (most recent call last):
  10. File "<stdin>", line 1, in <module>
  11. KeyError: 'School'
  12. >>> dict.get('School') #key若不存在,返回为空,无报错
  13. >>>

查找

多级字典嵌套及操作

  1. av_catalog = {
  2. "欧美":{
  3. "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
  4. "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
  5. "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
  6. "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
  7. },
  8. "日韩":{
  9. "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
  10. },
  11. "大陆":{
  12. "":["全部免费,真好,好人一生平安","服务器在国外,慢"]
  13. }
  14. }
  15.  
  16. av_catalog["大陆"][""][1] += ",可以用爬虫爬下来"
  17. print(av_catalog["大陆"][""])
  18. #ouput
  19. ['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']

字典嵌套

其他用法

  1. #values
  2. >>> info.values()
  3. dict_values(['LongZe Luola', 'XiaoZe Maliya'])
  4.  
  5. #keys
  6. >>> info.keys()
  7. dict_keys(['stu1102', 'stu1103'])
  8.  
  9. #setdefault
  10. >>> info.setdefault("stu1106","Alex")
  11. 'Alex'
  12. >>> info
  13. {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
  14. >>> info.setdefault("stu1102","龙泽萝拉")
  15. 'LongZe Luola'
  16. >>> info
  17. {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
  18.  
  19. #update
  20. >>> info
  21. {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
  22. >>> b = {1:2,3:4, "stu1102":"龙泽萝拉"}
  23. >>> info.update(b)
  24. >>> info
  25. {'stu1102': '龙泽萝拉', 1: 2, 3: 4, 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
  26.  
  27. #items
  28. info.items()
  29. dict_items([('stu1102', '龙泽萝拉'), (1, 2), (3, 4), ('stu1103', 'XiaoZe Maliya'), ('stu1106', 'Alex')])
  30.  
  31. #通过一个列表生成默认dict,有个没办法解释的坑,少用吧这个
  32. >>> dict.fromkeys([1,2,3],'testd')
  33. {1: 'testd', 2: 'testd', 3: 'testd'}
  34.  
  35. #输出字典,以可打印的字符串表示
  36. >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
  37. >>> str(dict)
  38. "{'Name': 'Runoob', 'Class': 'First', 'Age': 7}"
  39.  
  40. #计算字典元素个数,即键的总数
  41. >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
  42. >>> len(dict)
  43. 3

其他姿势

循环dict

  1. #方法1,常用
  2. for key in info:
  3. print(key,info[key])
  4.  
  5. #方法2
  6. for k,v in info.items(): #会先把dict转成list,数据里大时慎用
  7. print(k,v)
  8.  
  9. #方法3,输出带有编号
  10. >>> for k,v in enumerate(info,1): #通过enumerate方法取出key,然后通过get方法获取value
  11. ... print(k,v,info.get(v))
  12. ...
  13. 1 Age 7
  14. 2 Name Runoob
  15. 3 Class First

迭代dict

字典内置函数&方法

Python字典包含了以下内置函数:

 
序号 函数及描述 实例
1 len(dict)
计算字典元素个数,即键的总数。
  1. >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
  2. >>> len(dict)
  3. 3
2 str(dict)
输出字典,以可打印的字符串表示。
  1. >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
  2. >>> str(dict)
  3. "{'Name': 'Runoob', 'Class': 'First', 'Age': 7}"
3 type(variable)
返回输入的变量类型,如果变量是字典就返回字典类型。
  1. >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
  2. >>> type(dict)
  3. <class 'dict'>

Python字典包含了以下内置方法:

  1. 1. radiansdict.clear()               删除字典内所有元素
  2. 2. radiansdict.copy()                返回一个字典的浅复制
  3. 3. radiansdict.fromkeys()              创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
  4. 4. radiansdict.get(key, default=None)       返回指定键的值,如果值不在字典中返回default
  5. 5. key in dict                    如果键在字典dict里返回true,否则返回false
  6. 6. radiansdict.items()                以列表返回可遍历的(键, 值) 元组数组
  7. 7. radiansdict.keys()                以列表返回一个字典所有的键
  8. 8. radiansdict.setdefault(key, default=None)   和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
  9. 9. radiansdict.update(dict2)            把字典dict2的键/值对更新到dict
  10. 10. radiansdict.values()              以列表返回字典中的所有值

注: http://www.runoob.com/python3/python3-dictionary.html

5. 集合(set)

集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系

常用操作

  1. s = set([3,5,9,10]) #创建一个数值集合
  2.  
  3. t = set("Hello") #创建一个唯一字符的集合
  4.  
  5. a = t | s # t 和 s的并集
  6.  
  7. b = t & s # t 和 s的交集
  8.  
  9. c = t s # 求差集(项在t中,但不在s中)
  10.  
  11. d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中)
  12.  
  13. 基本操作:
  14.  
  15. t.add('x') # 添加一项
  16.  
  17. s.update([10,37,42]) # 在s中添加多项
  18.  
  19. 使用remove()可以删除一项:
  20.  
  21. t.remove('H')
  22.  
  23. len(s)
  24. set 的长度
  25.  
  26. x in s
  27. 测试 x 是否是 s 的成员
  28.  
  29. x not in s
  30. 测试 x 是否不是 s 的成员
  31.  
  32. s.issubset(t)
  33. s <= t
  34. 测试是否 s 中的每一个元素都在 t
  35.  
  36. s.issuperset(t)
  37. s >= t
  38. 测试是否 t 中的每一个元素都在 s
  39.  
  40. s.union(t)
  41. s | t
  42. 返回一个新的 set 包含 s t 中的每一个元素
  43.  
  44. s.intersection(t)
  45. s & t
  46. 返回一个新的 set 包含 s t 中的公共元素
  47.  
  48. s.difference(t)
  49. s - t
  50. 返回一个新的 set 包含 s 中有但是 t 中没有的元素
  51.  
  52. s.symmetric_difference(t)
  53. s ^ t
  54. 返回一个新的 set 包含 s t 中不重复的元素
  55.  
  56. s.copy()
  57. 返回 set s”的一个浅复制

常用(set)

参考: http://www.cnblogs.com/morninggood/articles/6829808.html

6. 文件操作(file)

对文件操作流程

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件

基本操作:

  1. f = open('lyrics')   # 打开文件
  2. first_line = f.readline()
  3. print('first line:',first_line)   # 读一行
  4. print('我是分隔线'.center(50,'-'))
  5. data = f.read()   # 读取剩下的所有内容,文件大时不要用
  6. print(data)      # 打印文件
  7. 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

Python文件指针:

seek():移动文件读取指针到指定位置,设置文件当前位置。

tell():返回文件读取指针的位置。

seek()的三种模式:

(1)f.seek(p,0)  移动当文件第p个字节处,绝对位置

(2)f.seek(p,1)  移动到相对于当前位置之后的p个字节

(3)f.seek(p,2)  移动到相对文章尾之后的p个字节

with语句

为了避免打开文件后忘记关闭,可以通过管理上下文,即:

  1. with open('log','r') as f:      # 如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
  2. ...

在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:

  1. with open('log1') as obj1, open('log2') as obj2:
  2. pass

文件操作常用方法:

 
1

file.close()   关闭文件。关闭后文件不能再进行读写操作。

2

file.flush()    刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。

3

file.fileno()    返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。

4

file.isatty()   如果文件连接到一个终端设备返回 True,否则返回 False。

5

file.next()    返回文件下一行。

6

file.read([size])   从文件读取指定的字节数,如果未给定或为负则读取所有。

7

file.readline([size])    读取整行,包括 "\n" 字符。

8

file.readlines([sizeint])    读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。

9

file.seek(offset[, whence])    设置文件当前位置

10

file.tell()    返回文件当前位置。

11

file.truncate([size])   截取文件,截取的字节通过size指定,默认为当前文件位置。

12

file.write(str)   将字符串写入文件,没有返回值。

13

file.writelines(sequence)  向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

                              

注: http://www.runoob.com/python3/python3-file-methods.html

7. 字符编码与解码

详细文章:

  1. 需知:
  2.  
  3. 1.python2默认编码是ASCII, python3里默认是unicode
  4.  
  5. 2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间
  6.  
  7. 3.py3encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

下图仅适用与py2.x

示例1:

  1. #-*-coding:utf-8-*-
  2. __author__ = 'shuke'
  3.  
  4. import sys
  5. print(sys.getdefaultencoding())
  6.  
  7. msg = "我爱北京天安门"
  8. msg_gb2312 = msg.decode("utf-8").encode("gb2312")
  9. gb2312_to_gbk = msg_gb2312.decode("gbk").encode("gbk")
  10.  
  11. print(msg)
  12. print(msg_gb2312)
  13. print(gb2312_to_gbk)

python2.x

  1. import sys
  2. print(sys.getdefaultencoding())
  3.  
  4. msg = "我爱北京天安门"
  5. #msg_gb2312 = msg.decode("utf-8").encode("gb2312")
  6. msg_gb2312 = msg.encode("gb2312") #默认就是unicode,不用再decode,喜大普奔
  7. gb2312_to_unicode = msg_gb2312.decode("gb2312")
  8. gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8")
  9.  
  10. print(msg)
  11. print(msg_gb2312)
  12. print(gb2312_to_unicode)
  13. print(gb2312_to_utf8)

python3.x

Python之路【第二篇】: 列表、元组、字符串、字典、集合的更多相关文章

  1. Python之路(第二篇):Python基本数据类型字符串(一)

    一.基础 1.编码 UTF-8:中文占3个字节 GBK:中文占2个字节 Unicode.UTF-8.GBK三者关系 ascii码是只能表示英文字符,用8个字节表示英文,unicode是统一码,世界通用 ...

  2. python之路第二篇(基础篇)

    入门知识: 一.关于作用域: 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 10 == 10: name = 'allen' print name 以下结论对吗? ...

  3. Python之旅Day2 元组 字符串 字典 集合

    元组(tuple) 元组其实跟列表差不多,也是存一组数,与列表相比,元组一旦创建,便不能再修改,所以又叫只读列表. 语法: names = ("Wuchunwei","Y ...

  4. Python—列表元组和字典

    Python-列表元组和字典 列表 元组 字典 列表: 列表是Python中的一种数据结构,他可以存储不同类型的数据.尽量存储同一种类型 列表索引是从0开始的,我们可以通过索引来访问列表的值. 列表的 ...

  5. Python开发【第二篇】:初识Python

    Python开发[第二篇]:初识Python   Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏 ...

  6. python-集合(第二篇(七):集合)

    第二篇(七):集合   python 集合 集合标准操作 摘要: 说明: ·类似于数学中学的集合,Python中的集合可以实现去重的功能,通过set()函数来实现: ·sets支持x in set, ...

  7. Python成长之路第二篇(2)_列表元组内置函数用法

    列表元组内置函数用法list 元组的用法和列表相似就不一一介绍了 1)def append(self, p_object):将值添加到列表的最后 # real signature unknown; r ...

  8. python基础教程-第二章-列表和元组

    本章将引入一个新的概念,:数据结构.数据结构是通过某种方式(例如对元素进行编号)组织在 一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构.在python中,最基本的数据结构 ...

  9. Python之路(第二十五篇) 面向对象初级:反射、内置方法

    [TOC] 一.反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它 ...

  10. python成长之路第二篇(4)_collections系列

    一.分别取出大于66的数字和小于66的数字 小练习:需求要求有一个列表列表中存着一组数字,要求将大于66的数字和小于66的数字分别取出来 aa = [11,22,33,44,55,66,77,88,9 ...

随机推荐

  1. Java集合框架(set)

    set继承自collection接口,其子类和子接口如下: set的共同特性:不能添加相同的元素,通常无法记住元素添加的顺序 1.HashSet类 判断两元素相同的标准:1.equals方法返回tru ...

  2. dva 笔记

    最简单的结构 // 创建应用 const app = dva(); // 注册 Model app.model({ namespace: 'count', state: 0, reducers: { ...

  3. 扫描线(线段树)+贪心 ZOJ 3953

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5572 Intervals Time Limit: 1 Second       ...

  4. Javascript判断Chrome浏览器

    今天分享一下如何通过Javascript来判断Chrome浏览器,这里是通过userAgent判断的,检测一下userAgent返回的字符串里面是否包含“Chrome”, 具体怎么检测是通过index ...

  5. Spring boot初始

    1 创建pom.xml parent:org.springframework.boot  包含启动的依赖 添加依赖,如 spring-boot-starter-web mvn dependency:t ...

  6. 2、Web基本介绍及Html语法介绍

    1.1 Web基本介绍 1.web就是world wide web的缩写.称之为全球广域网,俗称www.2.我们可以将web理解为就是当前的一种互联网.对于我们来说更多的就是网站服务.3.网站我们可以 ...

  7. Verilog笔记.2.数字逻辑电路

    1.数字逻辑电路的种类:1) 组合逻辑:输出只是当前输入逻辑电平的函数(有延时),与电路的原始状态无关的逻辑电路.也就是说,当输入信号中的任何一个发生变化时,输出都有可能会根据其变化而变化,但与电路目 ...

  8. 深入理解Spring系列之六:bean初始化

    转载 https://mp.weixin.qq.com/s/SmtqoELzBEdZLo8wsSvUdQ <深入理解Spring系列之四:BeanDefinition装载前奏曲>中提到,对 ...

  9. BBScan — 一个信息泄漏批量扫描脚本

    github:https://github.com/lijiejie/BBScan 有些朋友手上有几十万甚至上百万个域名,比如,乌云所有厂商的子域名. 如果把这30万个域名全部扔给wvs,APPsca ...

  10. Java并发编程(二)

    1.Lock接口                                                        在Lock接口出现之前,Java程序是靠synchronized关键字实 ...