python学习笔记:元组(turple)、文件(file)及其他
一、元组(turple)
- 元组(turple)是由简单的对象构成的,十分类似于列表,不同的地方在于元组是不可在原处修改的,并且通常以圆括号与圆括号中的一系列项的形式展示出来。
- 元组(turple)的位置是有序的,可以通过偏移来访问,因此也就支持索引、分片与合并等操作。
- 元组(turple)具有固定的长度,在不生成一个拷贝的情况下,是无法增长或者缩短的(也就是说不能在原处改变),但是元组是支持嵌套的。
- 常见的元组常量和运算如下表:
运算 | 解释 |
---|---|
T = () | 新建空元组 |
T = (0,) | 新建单个项的元组 |
T = (0, ‘1’, 1.2, ’ ASD’) | 新建四项元组 |
T = 0, ‘1’, 1.2, ’ ASD’ | 新建四项元组 |
T = (‘ASD’, (‘ZXC’, 0)) | 嵌套 |
T[i] | 按偏移访问 |
T[i][j] | 按偏移访问 |
T[i:j] | 分片 |
len(T) | 求取长度 |
T1+T2 | 合并 |
T*3 | 重复 |
for x in T:print(x) | 迭代与成员关系 |
‘spam’ in T | 迭代 |
[x ** 2 for x in T] | 迭代与成员关系 |
T.index(‘NI’) | 搜索 |
T.count(‘NI’) | 计数 |
- 注意:
- 元组(turple)在“*”、“+”以及分片操作时,将返回新元组。
- 元组(turple)内部列表是可以在原处修改的。
二、文件(file)
-
此部分主要是讲python里面的内置对象 (文件对象) 提供了一种可以存取python程序内部文件的方法。
-
常见的文件运算如下表:
操作 | 解释 |
---|---|
output = open(r’C:\spam’, ‘w’) | 创建输出文件,’w‘指的是写入 |
input = open(‘data’, ‘r’) | 创建输入文件,'r’指的是读写文件 |
input = open(‘data’) | 创建输入文件,默认同上 |
astring = input.read() | 从文件中读取单一字节到一个字符串 |
astring = input.read(N) | 读取N个字节 到一个字符串 |
astring = input.readline() | 读取一行(包含行末标识符)到一个字符串 |
alist = input.readlines() | 读取整个文件到字符串列表 |
output.write(astring) | 把字符串写入文件 |
output.writelines(alist) | 把列表内所有字符串写入文件 |
output.close() | 手动关闭文件 |
output.flush() | 把输出缓冲区刷到硬盘中,但不关闭文件 |
anyfile.seek(N) | 修改文件操作位置到偏移量为N处 |
for line in open(‘data’):use line | 文件迭代器,按行读取文件 |
open(‘f.txt’, encoding = ‘latin-1’) | Unicode文本文件 |
open('f.bin, ‘rb’) | 二进制文件 |
- 文件处理模式:
操作 | 解释 |
---|---|
r | 按输入打开文件 |
w | 输出生成打开文件 |
a | 在文件尾部追加内容而打开文件 |
rb | 按输入打开文件并进行二进制处理 |
wb | 输出生成打开文件并进行二进制处理 |
r+ | 同时按输入和输出方式打开文件 |
w+ | 同时按输入和输出方式打开文件 |
- 文件迭代器是最好的读取行的工具。现在从文本读取文字行的最佳方式时根本不要读取改文件,而是使用文件迭代器。
- 文件中的内容是字符串而不是对象,因此在读写的时候,经常会需要进行类型转换。
- 使用close时个不错的习惯,它可以终止与外部文件的连接。虽然只要对象不再被引用,python内部就会进行垃圾回收,也就自动关闭对应的文件,但是关闭文件的特性并不是python语言定义的一部分,所以调用close还是我们需要养成的一个习惯。
- 关闭文件指的是既释放了操作系统的资源也清空了缓冲区。默认时,输出文件总是缓冲的,也就是说,写入的文件不一定会立马进入硬盘,但关闭一个文件或者调用flush方法可以迫使缓存的数据进入硬盘。
- 实际应用中的操作:
line.rstrip(),line.split(’,’),eval(parts[0])。其中字符串方法rstrip()可以删除末尾多余的行终止符;字符串方法split(’,’)可以按逗号分隔开得到列表;eval()可以把字符串当作可执行的程序代码。
三、其他
- 用pickle存储python的原生对象,pickle模块能让我们直接在文件中存储几乎任何python对象的工具,例如:
>>>D = {'a':1,'b':2}
>>>F = open('datafile.pkl','wb')
>>>import pickle
>>>pickle.dump(D,F)
>>>F.close()
- 之后想要取回字典时,只需用一次pickle重建就可以了:
>>>F = open('datafile.pkl','rb')
>>>E = pickle.load(F)
>>>E
>>>{'a':1,'b':2}
- 需要注意的其他要点:
- 对象根据分类来共享对应的操作,如:字符串、列表和元组都共享诸如合并、长度和索引等序列操作。
- 只有可变对象(列表、字典和集合)可以在原处修改。其他类型的对象不能在原处修改,如数字、字符串和元组。
- 列表、字典和元组可以包含任何种类型的对象。
- 列表和字典可以动态地扩大和缩小。
- 没有限制的分片表达式能够复制序列。
- 字典copy的方法能复制字典。
- 有些内置函数能够生成拷贝。
- copy标准库模块可以生成完整拷贝。
- 其他许多情况都是引用。
- "=="操作符测试值的相等性。
- “is"表达式测试对象的一致性,即测试二者是否是同一个对象,是比”=="更严格的测试。
- 数字通过大小进行比较。
- 字符串是按照字典顺序,一个字符接一个字符地进行比较。
- 列表和元组从左到右对每部分的内容进行比较。
- 字典通过排序之后的(键、值)列表进行比较。
- 数字混合类型比较再python3里面是错误的。