迭代器
迭代器的功能:提供了可扩展的迭代器接口;增强了列表迭代和字典迭代中的性能;创建真正的迭代接口,而不是原来的随机对象访问;与所有以及存在的用户定义的类以及扩展的模拟序列和映射的对象向后兼容;迭代非序列集合时可以创建更简洁可读的代码。从根本上来说,迭代器有一个next()方法的对象而不是通过索引来技术,当循环机制需要下一个项时调用迭代器的next()方法可以获得它,条目全部取出后会引发一个StopIteration异常,这并不表示错误发生,只是告诉外部调用者迭代完成。迭代器不能向后以后,不能回到开始,不能复制一个迭代器,如果再次迭代同个对象只能去创建另一个迭代器对象。
>>> tuple1=('a',21,'34')
>>> i=iter(tuple1)
>>> i.__next__()
'a'
>>> i.__next__()
21
>>> i.__next__()
'34'
>>> i.__next__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> file1=open('d:/study/python/test.txt','w+')
>>> file1.writelines("a\n")
>>> file1.writelines("b\n")
>>> file1.close()
>>> file1=open('d:/study/python/test.txt','r')
>>> for line in file1:
... print(line)
...
a
b
>>> file1.close()
在迭代序列的时候不可以修改这个对象,除列表外其他序列都是不可变的,修改这些对象将会导致异常
>>> mDict={'a':1,'b':2,'c':3}
>>> for eachKey in mDict:
... print(eachKey,mDict[eachKey])
... del mDict[eachKey]
...
a 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: dictionary changed size during iteration
文件操作
函数open()
函数open提供了初始化输入/输出(I/O)操作的通用接口,open()内建函数成功打开文件后悔返回一个文件对象,否则引发一个错误,当操作失败,Python会产生一个IOError异常:
handle = open(fileName,access_mode='r',buffering=-1)
文件模式 | 操作 |
---|---|
r | 以读方式打开 |
rU/Ua | 以读方式打开,同时提供通用换行符支持 |
w | 以写方式打开 |
a | 以追加模式打开 |
r+ | 以读写模式打开 |
w+ | 以读写模式打开 |
a+ | 以读写模式打开 |
rb | 以二进制读模式打开 |
wb | 以二进制写模式打开 |
ab | 以二进制追加模式打开 |
rb+ | 以二进制读写模式打开 |
wb+ | 以二进制读写模式打开 |
ab+ | 以二进制读写模式打开 |
buffering用于指示访问文件所采用的缓冲方式,0表示不缓冲,1表示只缓冲一行数据,大于1的值代表使用给定值作为缓冲区大小,不提供该参数或者给定负值代表使用系统默认缓冲机制。
文件对象的内建方法
方 法 | 操 作 |
---|---|
file.close() | 关闭文件 |
file.fileno() | 返回文件描述符 |
file.flush() | 刷新文件的内部缓冲区 |
file.isatty() | 判断file是否是一个类tty设备 |
file.next() | 返回文件的下一行,在没有其他行驶返回StopIteration异常 |
file.read(size=-1) | 从文件读取size个字节,当为给定size或给负值时读取剩余所有字节作为字符串返回 |
file.readline(size=-1) | 从文件中读取并返回一行,或返回最大size个字符 |
file.readlines(size=0) | 读取文件的所有行并作为一个列表返回,如果给定size且>0,那么将返回总和接近为size字节的行 |
file.seek(off,whence=0) | 在文件中移动文件指针,从whence(0文件起始,1当前位置,2文件末尾)偏移off字节 |
file.tell() | 返回当前在文件中的位置 |
file.truncate(size=file.tell()) | 截取文件到最大size字节,默认为当前文件位置 |
file.write(str) | 向文件写入字符串 |
file.writelines(seq) | 向文件写入字符串序列seq |
文件内建属性
属 性 | 描 述 |
---|---|
file.closed | true关闭,否则false |
file.encoding | 文件使用的编码方式 |
file.mode | 文件打开时使用的访问模式 |
file.name | 文件名 |
file.newlines | 未读取到行分隔符时为None,只有一种行分隔符时为一个字符串,当文件有多种类型的行结束符时,则为一个包含所有档期那所遇到的行结束符的列表 |