05-Python的核心数据类型-元组、文件
元组(tuple)
元组对象,是一个不可以改变的列表。和列表一样,元组是序列,但是它具有不可变性,和字符串类似。
我们来定一个元组:
>>> T = (1,2,3,4) #定义一个元组
>>> T
(1, 2, 3, 4)
>>> len(T)
4
>>> T + (5,6) #网元组中添加元素
(1, 2, 3, 4, 5, 6)
>>> T[0]
1
元组有两个专有的,可调用的方法:
>>> T.index(4) #获取第一次出现4的索引
3
>>> T.count(4) #获取出现过几次
1
当然,元组是不可变的:
>>> T[0] = 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
元组存在的意义在于,它提供了一种完整性的约束,如果程序以列表的形式传递一个对象的集合,它可能在任何地方改变,如果使用元组的话,是不能改变的。
文件(file)
文件对象是Python代码对电脑上外部文件的主要接口。虽然文件是核心类型,但是它很特殊:没有特定的常量语法创建文件,需调用内置的open函数以字符串的形式传递给他一个外部的文件名以及一个处理模式的字符串。例如,创建一个文本输出文件,可以传递其文件名以及‘w’ 处理模式字符串以写数据:
>>> f = open('data.txt', 'w') #使用写模式创建文件
>>> f.write('Hello\n') #写入,返回字符个数
6
>>> f.write('world\n')
6
>>> f.close()
>>> f = open('data.txt')
>>> txt = f.read()
>>> txt
'Hello\nworld\n'
>>> print(txt)
Hello
world
>>> txt.split()
['Hello', 'world']
文件的打开方式有以下几种:
模式 | 描述 |
---|---|
r | 只读。指针在文件开头 |
rb | 二进制格式只读。指针在文件开头 |
r+ | 读写。指针在文件开头 |
rb+ | 二进制读写。指针在文件头 |
w | 写。如果文件存在,覆盖,如果文件不存在,创建新文件 |
wb | 二进制格式写。如果该文件已存在则覆盖,如果不存在,创建新文件 |
w+ | 读写。如果该文件已存在则将其覆盖。如果该不存在,创建新文件 |
wb+ | 二进制格式读写。如果文件已存在则覆盖。如果该不存在,创建新文件。 |
a | 追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
如果要看所有文件支持的方法,可以使用dir:
>>> dir(f)
['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '_
_doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattrib
ute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '
__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '_
_reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclassho
ok__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_f
inalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno
', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'rea
dable', 'readline', 'readlines', 'seek', 'seekable', 'tell', 'truncate', 'writab
le', 'write', 'writelines']
集合(Set)
集合是唯一的不可变的对象的无序集合。集合可以通过调用内置set函数而创建,或者使用Python3中新的集合常量和表达式创建,并且他支持一般的数据集合操作如:交、并等。
我们来定一个集合:
>>> x = set('spam') #创建一个集合
>>> y = {'h', 'a', 'm'} #Python3.0
>>> x, y
({'s', 'm', 'p', 'a'}, {'a', 'm', 'h'})
>>> x & y
{'m', 'a'}
>>> x | y
{'p', 'h', 's', 'm', 'a'}
>>> x - y
{'s', 'p'}
>>> {x ** 2 for x in [1,2,3,4]}
{16, 1, 4, 9}
集合可以添加对象,但是不能添加重复对象:
>>> x.add('v') #添加元素
>>> x
{'p', 'a', 'v', 's', 'm'}
>>> x.add('v') #再次添加,将不会重复添加
>>> x
{'p', 'a', 'v', 's', 'm'}
总结:
数字,字符串,列表,字典,元组,文件,集合一般被认为是核心对象(数据)类型。他们是Python语言自身的一部分,并且总是有效的。
Python中的数字,字符串,和元组都属于不可变对象,他们一点呗创建后,不能改变。
一个“序列”是一个对位置进行排序的对象的集合。字符串,列表和元组是Python中所有的序列,他们都拥有一般的序列操作,例如,索引,合并,以及分片。