Python之路【第二篇】: 列表、元组、字符串、字典、集合
本文内容:
--------------------------------------
- 列表、元组操作
- 字符串操作
- 字典操作
- 集合操作
- 文件操作
- 字符编码与转码
1. 列表(list)
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
Python有6个序列的内置类型,但最常见的是列表和元组。
序列都可以进行的操作包括索引,切片,加,乘,检查成员。
此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
- list1 = ['physics', 'chemistry', 1997, 2000];
- list2 = [1, 2, 3, 4, 5 ];
- list3 = ["a", "b", "c", "d"];
与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。
- >>> names = ['Shuke',"Jack",'Jone']
- >>> names[0]
- 'Shuke'
- >>> names[2]
- 'Jone'
- >>> names[-1] # 最后一个元素下标是-1
- 'Jone'
- >>> names[-2] # 倒数的第二个元素下标是-2
- 'Jack
切片
使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符,如下所示:
- >>> 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']
- >>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
- ['Alex', 'Tenglan', 'Eric']
- >>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
- ['Rain', 'Tom', 'Amy']
- >>> names[3:-1] #这样-1就不会被包含了
- ['Rain', 'Tom']
- >>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
- ['Alex', 'Eric', 'Tom']
- >>> names[::2] #和上句效果一样
- ['Alex', 'Eric', 'Tom'
切片
追加
描述
append() 方法用于在列表末尾添加新的对象。
语法
append()方法语法:
- list.append(obj) #obj -- 添加到列表末尾的对象。
- >>> names
- ['Shuke', 'Jack', 'Jone']
- >>> names.append("Alex") #追加
- >>> names
- ['Shuke', 'Jack', 'Jone', 'Alex']
追加append()
插入
描述
insert() 函数用于将指定对象插入列表的指定位置。
语法
insert()方法语法:
- list.insert(index, obj) # index -- 对象 obj 需要插入的索引位置,obj -- 要插入列表中的对象。
- >>> names
- ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
- >>> names.insert(2,"强行从Eric前面插入")
- >>> names
- ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
- >>> names.insert(5,"从eric后面插入试试新姿势")
- >>> names
- ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
插入(insert)
修改
语法
通过索引找到列表中的元素,并修改,使用=等号赋予新值
- >>> names
- ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
- >>> names[2] = "该换人了"
- >>> names
- ['Alex', 'Tenglan', '该换人了', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
修改
删除
描述
del 删除列表中指定索引位置的元素。
remove() 函数用于移除列表中某个值的第一个匹配项
pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
语法
- del list[index] # 删除列表中指定索引位置的元素,index --留空表示删除列表。
- list.remove(obj) #obj -- 列表中要移除的对象。
- list.pop(obj=list[-1]) # obj -- 可选参数,要移除列表元素的对象。
- >>> 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() #删除列表最后一个值
- '我是新来的'
- >>> names
- ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
删除(del/pop/remove)
拷贝
- >>> names
- ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
- >>> name_copy = names.copy()
- >>> name_copy
- ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
拷贝(copy)
统计
- >>> names
- ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]
- >>> names.count("Amy")
- 2
统计(count)
排序和翻转
描述
sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
reverse() 函数用于反向列表中元素。
语法
sort()方法语法:
- list.sort([func]) #func -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
- list.reverse() # 没有参数,直接调用方法
- """
- 注:
- 1. python2.x中列表元素可以为数字,字符串,布尔值,None等;
- 2. python3.x中列表元素必须为同一种数据类型
- """
- # ========sort()=========
- # python2.x
- names = ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 123, True, False]
- names.sort()
- print names # [False, True, 123, 'Alex', 'Amy', 'Rain', 'Tenglan', 'Tom']
- # python3.x
- '''
- 执行结果:
- Traceback (most recent call last):
- File "<input>", line 1, in <module>
- TypeError: unorderable types: int() < str()
- '''
- # ========reverse()=========
- # python2.x 和 python3.x相同
- names = ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy',123, True, False]
- names.reverse()
- print(names) # [False, True, 123, 'Amy', 'Tom', 'Rain', 'Tenglan', 'Alex']
排序(sort)和翻转(reverse)
获取下标
描述
index() 函数用于从列表中找出某个值第一个匹配项的索引位置。
语法
index()方法语法:
- list.index(obj) #obj -- 查找的对象。
- >>> names
- ['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '', '', '']
- >>> names.index("Amy")
- 2 #只返回找到的第一个下标
下标index()
列表扩展
描述
extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
语法
extend()方法语法:
- list.extend(seq) # seq -- 元素列表。
- >>> names
- ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
- >>> b = [1,2,3]
- >>> names.extend(b)
- >>> names
- ['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. list.append(obj) 在列表末尾添加新的对象
- 2. list.count(obj) 统计某个元素在列表中出现的次数
- 3. list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
- 4. list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
- 5. list.insert(index, obj) 将对象插入列表
- 6. list.pop(obj=list[-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
- 7. list.remove(obj) 移除列表中某个值的第一个匹配项
- 8. list.reverse() 反向列表中元素
- 9. list.sort([func]) 对原列表进行排序
注: http://www.runoob.com/python/python-lists.html
2. 元组(tuple)
Python的元组与列表类似,不同之处在于元组的元素不能修改,元组又称为是不可变的列表。
元组使用小括号,列表使用方括号。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
语法:
- tup1 = ('physics', 'chemistry', 1997, 2000);
创建空元组
- tup1 = ();
元组中只包含一个元素时,需要在元素后面添加逗号
- 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 | 迭代 |
元组索引,截取
因为元组也是一个序列,所以我们可以访问元组中的指定位置的元素,也可以截取索引中的一段元素,如下所示:
元组:
- L = ('spam', 'Spam', 'SPAM!')
Python 表达式 | 结果 | 描述 |
---|---|---|
L[2] | 'SPAM!' | 读取第三个元素 |
L[-2] | 'Spam' | 反向读取;读取倒数第二个元素 |
L[1:] | ('Spam', 'SPAM!') | 截取元素 |
元组内置函数
Python元组包含了以下内置函数
- 1. cmp(tuple1, tuple2) 比较两个元组元素。
- 2. len(tuple) 计算元组元素个数。
- 3. max(tuple) 返回元组中元素最大值。
- 4. min(tuple) 返回元组中元素最小值。
- 5. tuple(seq) 将列表转换为元组
注: http://www.runoob.com/python/python-tuples.html
3. 字符串(string)
特性: 不可改变
- 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
- 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
注: http://www.runoob.com/python3/python3-string.html
4. 字典(dict)
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
- d = {key1 : value1, key2 : value2 }
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
一个简单的字典实例,语法:
- info = {
- 'stu1101': "TengLan Wu",
- 'stu1102': "LongZe Luola",
- 'stu1103': "XiaoZe Maliya",
- }
- 或
- dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
- 或
- dict1 = { 'abc': 456 };
- dict2 = { 'abc': 123, 98.6: 37 };
字典的特性:
- dict是无序的。
- key必须是唯一的,so 天生去重 (不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住)。
- 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。
增加
向字典添加新内容的方法是增加新的键/值对
- >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
- >>> dict['School']='oldboy'
- >>> dict
- {'Age': 7, 'Name': 'Runoob', 'School': 'oldboy', 'Class': 'First'}
增加
修改
更改key对应的value即可
- >>> dict['Name']='Shuke'
- >>> dict
- {'Age': 7, 'Name': 'Shuke', 'School': 'oldboy', 'Class': 'First'}
修改
删除
- del dict['Name'] # 删除键 'Name'
dict.pop('Name') # 删除键 'Name',返回值为value
dict.popitem() # 随机删除
dict.clear() # 删除字典
del dict # 删除字典
- >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
- >>> dict.pop("Age") #标准删除
- >>> dict
- {'Name': 'Runoob', 'Class': 'First'}
- >>> del dict['Class'] #删除Class键值对
- >>> dict
- {'Name': 'Runoob'}
- >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
- >>> dict.popitem() #随机删除
- ('Age', 7)
- >>> dict
- {'Name': 'Runoob', 'Class': 'First'}
- >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
- >>> dict.clear() #清空字典
- >>> dict
- {}
- >>> info
- {'stu1104': 'tenglan Wu', 'stu1101': 'TengLan Wu', 'stu1103': 'XiaoZe Maliya', 'stu1102': 'LongZe Luola'}
- >>> del info
- >>> info
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- NameError: name 'info' is not defined
- >>>
删除
查找
- >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
- >>> "Name" in dict #标准用法
- True
- >>> dict.get("Age") #获取
- 7
- >>> dict['Age'] #获取,与get方法有区别
- 7
- >>> dict['School'] #key不存在会报错
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- KeyError: 'School'
- >>> dict.get('School') #key若不存在,返回为空,无报错
- >>>
查找
多级字典嵌套及操作
- av_catalog = {
- "欧美":{
- "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
- "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
- "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
- "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
- },
- "日韩":{
- "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
- },
- "大陆":{
- "":["全部免费,真好,好人一生平安","服务器在国外,慢"]
- }
- }
- av_catalog["大陆"][""][1] += ",可以用爬虫爬下来"
- print(av_catalog["大陆"][""])
- #ouput
- ['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']
字典嵌套
其他用法
- #values
- >>> 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,有个没办法解释的坑,少用吧这个
- >>> dict.fromkeys([1,2,3],'testd')
- {1: 'testd', 2: 'testd', 3: 'testd'}
- #输出字典,以可打印的字符串表示
- >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
- >>> str(dict)
- "{'Name': 'Runoob', 'Class': 'First', 'Age': 7}"
- #计算字典元素个数,即键的总数
- >>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
- >>> len(dict)
- 3
其他姿势
循环dict
- #方法1,常用
- for key in info:
- print(key,info[key])
- #方法2
- for k,v in info.items(): #会先把dict转成list,数据里大时慎用
- print(k,v)
- #方法3,输出带有编号
- >>> for k,v in enumerate(info,1): #通过enumerate方法取出key,然后通过get方法获取value
- ... print(k,v,info.get(v))
- ...
- 1 Age 7
- 2 Name Runoob
- 3 Class First
迭代dict
字典内置函数&方法
Python字典包含了以下内置函数:
序号 | 函数及描述 | 实例 |
---|---|---|
1 | len(dict) 计算字典元素个数,即键的总数。 |
|
2 | str(dict) 输出字典,以可打印的字符串表示。 |
|
3 | type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。 |
|
Python字典包含了以下内置方法:
- 1. radiansdict.clear() 删除字典内所有元素
- 2. radiansdict.copy() 返回一个字典的浅复制
- 3. radiansdict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
- 4. radiansdict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
- 5. key in dict 如果键在字典dict里返回true,否则返回false
- 6. radiansdict.items() 以列表返回可遍历的(键, 值) 元组数组
- 7. radiansdict.keys() 以列表返回一个字典所有的键
- 8. radiansdict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
- 9. radiansdict.update(dict2) 把字典dict2的键/值对更新到dict里
- 10. radiansdict.values() 以列表返回字典中的所有值
注: http://www.runoob.com/python3/python3-dictionary.html
5. 集合(set)
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
常用操作
- 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”的一个浅复制
常用(set)
参考: http://www.cnblogs.com/morninggood/articles/6829808.html
6. 文件操作(file)
对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
基本操作:
- f = open('lyrics') # 打开文件
- first_line = f.readline()
- print('first line:',first_line) # 读一行
- print('我是分隔线'.center(50,'-'))
- data = f.read() # 读取剩下的所有内容,文件大时不要用
- print(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
Python文件指针:
seek():移动文件读取指针到指定位置,设置文件当前位置。
tell():返回文件读取指针的位置。
seek()的三种模式:
(1)f.seek(p,0) 移动当文件第p个字节处,绝对位置
(2)f.seek(p,1) 移动到相对于当前位置之后的p个字节
(3)f.seek(p,2) 移动到相对文章尾之后的p个字节
with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
- with open('log','r') as f: # 如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
- ...
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:
- with open('log1') as obj1, open('log2') as obj2:
- 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.在python2默认编码是ASCII, python3里默认是unicode
- 2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间
- 3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string
下图仅适用与py2.x
示例1:
- #-*-coding:utf-8-*-
- __author__ = 'shuke'
- import sys
- print(sys.getdefaultencoding())
- msg = "我爱北京天安门"
- msg_gb2312 = msg.decode("utf-8").encode("gb2312")
- gb2312_to_gbk = msg_gb2312.decode("gbk").encode("gbk")
- print(msg)
- print(msg_gb2312)
- print(gb2312_to_gbk)
python2.x
- import sys
- print(sys.getdefaultencoding())
- msg = "我爱北京天安门"
- #msg_gb2312 = msg.decode("utf-8").encode("gb2312")
- msg_gb2312 = msg.encode("gb2312") #默认就是unicode,不用再decode,喜大普奔
- gb2312_to_unicode = msg_gb2312.decode("gb2312")
- gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8")
- print(msg)
- print(msg_gb2312)
- print(gb2312_to_unicode)
- print(gb2312_to_utf8)
python3.x
Python之路【第二篇】: 列表、元组、字符串、字典、集合的更多相关文章
- Python之路(第二篇):Python基本数据类型字符串(一)
一.基础 1.编码 UTF-8:中文占3个字节 GBK:中文占2个字节 Unicode.UTF-8.GBK三者关系 ascii码是只能表示英文字符,用8个字节表示英文,unicode是统一码,世界通用 ...
- python之路第二篇(基础篇)
入门知识: 一.关于作用域: 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 10 == 10: name = 'allen' print name 以下结论对吗? ...
- Python之旅Day2 元组 字符串 字典 集合
元组(tuple) 元组其实跟列表差不多,也是存一组数,与列表相比,元组一旦创建,便不能再修改,所以又叫只读列表. 语法: names = ("Wuchunwei","Y ...
- Python—列表元组和字典
Python-列表元组和字典 列表 元组 字典 列表: 列表是Python中的一种数据结构,他可以存储不同类型的数据.尽量存储同一种类型 列表索引是从0开始的,我们可以通过索引来访问列表的值. 列表的 ...
- Python开发【第二篇】:初识Python
Python开发[第二篇]:初识Python Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏 ...
- python-集合(第二篇(七):集合)
第二篇(七):集合 python 集合 集合标准操作 摘要: 说明: ·类似于数学中学的集合,Python中的集合可以实现去重的功能,通过set()函数来实现: ·sets支持x in set, ...
- Python成长之路第二篇(2)_列表元组内置函数用法
列表元组内置函数用法list 元组的用法和列表相似就不一一介绍了 1)def append(self, p_object):将值添加到列表的最后 # real signature unknown; r ...
- python基础教程-第二章-列表和元组
本章将引入一个新的概念,:数据结构.数据结构是通过某种方式(例如对元素进行编号)组织在 一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构.在python中,最基本的数据结构 ...
- Python之路(第二十五篇) 面向对象初级:反射、内置方法
[TOC] 一.反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它 ...
- python成长之路第二篇(4)_collections系列
一.分别取出大于66的数字和小于66的数字 小练习:需求要求有一个列表列表中存着一组数字,要求将大于66的数字和小于66的数字分别取出来 aa = [11,22,33,44,55,66,77,88,9 ...
随机推荐
- Java集合框架(set)
set继承自collection接口,其子类和子接口如下: set的共同特性:不能添加相同的元素,通常无法记住元素添加的顺序 1.HashSet类 判断两元素相同的标准:1.equals方法返回tru ...
- dva 笔记
最简单的结构 // 创建应用 const app = dva(); // 注册 Model app.model({ namespace: 'count', state: 0, reducers: { ...
- 扫描线(线段树)+贪心 ZOJ 3953
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5572 Intervals Time Limit: 1 Second ...
- Javascript判断Chrome浏览器
今天分享一下如何通过Javascript来判断Chrome浏览器,这里是通过userAgent判断的,检测一下userAgent返回的字符串里面是否包含“Chrome”, 具体怎么检测是通过index ...
- Spring boot初始
1 创建pom.xml parent:org.springframework.boot 包含启动的依赖 添加依赖,如 spring-boot-starter-web mvn dependency:t ...
- 2、Web基本介绍及Html语法介绍
1.1 Web基本介绍 1.web就是world wide web的缩写.称之为全球广域网,俗称www.2.我们可以将web理解为就是当前的一种互联网.对于我们来说更多的就是网站服务.3.网站我们可以 ...
- Verilog笔记.2.数字逻辑电路
1.数字逻辑电路的种类:1) 组合逻辑:输出只是当前输入逻辑电平的函数(有延时),与电路的原始状态无关的逻辑电路.也就是说,当输入信号中的任何一个发生变化时,输出都有可能会根据其变化而变化,但与电路目 ...
- 深入理解Spring系列之六:bean初始化
转载 https://mp.weixin.qq.com/s/SmtqoELzBEdZLo8wsSvUdQ <深入理解Spring系列之四:BeanDefinition装载前奏曲>中提到,对 ...
- BBScan — 一个信息泄漏批量扫描脚本
github:https://github.com/lijiejie/BBScan 有些朋友手上有几十万甚至上百万个域名,比如,乌云所有厂商的子域名. 如果把这30万个域名全部扔给wvs,APPsca ...
- Java并发编程(二)
1.Lock接口 在Lock接口出现之前,Java程序是靠synchronized关键字实 ...