Learning Python(4)

chap9 文件和输入输出

1.文件内建函数–open() and file()
file_object = open(file_name,access_mode=’r’,buffering=-1)
access_mode:’r’ ‘w’ ‘a’ ‘U’—‘r’ ‘U’模式打开的文件必须已经存在,’w’模式打开的文件若存在则首先清空,然后重建。
buffering可选参数只是访问文件所采用的缓冲方式。0-不缓冲,1-缓冲一行,>1-使用给定值作为缓冲区大小,不提供参数或给定负值代表使用系统默认缓冲机制。
file()工厂函数,和open()实现相同的功能,建议使用open()来读写文件,在说明处理文件对象时使用file(),eg.if instance(f,file)
ps.UNS(Universal NEWLINE Support,通用换行符支持),当使用’U’标志打开文件时,所有行分隔符,或行结束符通过python的输入方法(read*())返回时都会被替换为换行符\n。

2.文件内建方法
open成功执行并返回一个文件对象,所有对该文件的后续操作都将通过这个“句柄”进行。文件方法分为四类:输入、输出、文件内移动及杂项操作。
1)输入
file.read(size=-1)从文件读取size个字节,当为给定size或给定负值的时候,读取剩余的所有字节,然后作为字符串返回
file.readline(size=-1)从文件中读取并返回一行,含行结束符,或返回最大size个字符
file.readlines(sizhint=0)读取文件的所有航并作为一个列表返回,含所有的行结束符,若给定sizhint且大于0,就返回总和大约为sizhint字节的行(大小由缓冲器容量决定)
file.xreadlines()高效迭代文件的行,xreadlines模块中,非一次读取所有的行,而是每次读取一块,用for循环时可以减少对内存的占用。和使用iter(file)效果一样,或for循环中使用for eachLine in file替代它,xreadlines么必要使用了。
2)输出
file.write(str)向文件中写入字符串
file.writelines(seq)向文件写入字符串序列seq,seq是一个返回字符串的可迭代对象。
ps.当使用read或者readlines从文件中读取行时,python不会删除行结束符,程序员如下处理:

f = open('myfile','r')
data = [line.strip() for line in f.readlines()]
f.close()

类似的,write和writelines也不会自动加入行结束符,应该向文件写入数据前自己完成。
print语句默认在输出内容末尾加一个换行符,而在语句后加一个逗号就可以避免这个行为。readline和readlines函数不对行里的空白字符做任何处理,所以有必要加上逗号。如果省略逗号,显示出的文本每行后会有两个换行符,其中一个是附带的,另一个是print语句自动添加的。
3)文件内移动
file.seek(off,whence=0)在文件中移动文件指针,从whence(0-文件起始,1-当前位置,2-文件末尾)偏移off字节
4)文件迭代

for eachLine in f.readline()
.
.

5)其它
file.close()
file.fileno()返回打开文件的描述符,整型,可以用在如os模块的一些底层操作上
file.flush()刷新文件的内部缓冲区
file.isatty()判断file是否是一个类tty设备
file.truncate(size=file.tell())截取文件到最大size字节,默认为当前文件位置
6)文件方法杂项

filename = raw_input('Enter file name:')
f = open(filename,'r')
###bad
allLines = f.readlines()#读完所有行才开始输出
f.close()
for eachLine in allLines:
    print eachLine,
###good
for eachLine in f:
    print eachLine,
f.close()

3.行分隔符和其他文件系统的差异
行分隔符:
POSIX(UNIX或MAC OS X)系统上,行分隔符为换行符\n;
旧MacOS下是\r;
DOS和Wind32是\r\n。
路径分隔符:
POSIX “/”
DOS/Windows “\”
旧MacOS “:”
导入os模块,轻松惬意跨越多平台。
os.lineseq
os.seq
os.pathseq
os.curdir
os.pardir

4.文件内建属性
file.closed
file.encoding
file.mode
file.name
file.newlines
file.softspace

5.强大的os模块

chap10 错误和异常

1.错误和异常
错误分语法错误和逻辑错误。
异常是因为程序出现了错误而在正常控制流以外采取的行为,这个行为又分文两个阶段:首先是引起异常发生的错误,然后是检测阶段。

2.python中的异常
NameError
ZeroDivisionError
SyntaxError
IndexError
KeyError
IOError
AttributeError

3.检测和处理异常
1)try-except语句
2)多个except语句
3)处理多个异常的except语句
4)捕获所有异常

4.避免把大片的代码装入try-except中然后使用pass忽略掉错误,不要捕获所有异常,然后忽略掉它们。

5.finally子句无论异常是否发生,是否捕捉都会执行的一段代码。

try:
   try_suite
except Exception1:
   suite_for_Exception1
except (Exception2,Exception3,Exception4):
   suite_for_Exceptions_2_3_and_4
except Exception5,Argument5:
   suite_for_Exception5_plus_argument
except (Exception6,Exception7),Argument67:
   suite_for_exceptionds6_and_7_plus_argument
except:
   suite_for_all_other_exceptions
else:
   no_exceptions_detected_suite
finally:
   always_execute_suite

6.触发异常
raise语句
raise [SomeException [,args [,traceback]]]
SomeException触发异常的名字
args可选参数传给异常
traceback当异常触发时新生成的一个用于异常-正常化的跟踪记录对象

7.断言
断言语句等价于这样的python表达式,如果断言成功不采取任何措施,否则触发AssertionError的异常.assert的语法如下:
assert expression[,arguments]

Leave a Reply

Your email address will not be published. Required fields are marked *