learn with python-第十一章:文件和异常

第十一章:文件和异常
程序运行的时候,数据存在于内存中,当程序结束或者计算机关闭的时候,内存中的数据就会丢失,我们可以把数据保存在文件中进行持久化,而文件存储在磁盘或者cd-room等非易失存储中。
多个文件以文件夹的形式存在,每个文件都有一个唯一标识名。
通过读取和写文件,程序可以相互交换信息以及生成类似pdf的可打印文件。
操作文件同使用书籍一样,要使用一本书,你必须先打开书本,最后你还要关闭书本,当书本开的时候你可以选择写入或者读取,大部分时候你会顺序读取书籍,但是某些时候你也可能跳过某一部分。
文件操作也一样,通过指定文件名以及打开模式来打开一个文件。
打开文件创建了一个文件对象,在下面例子,用f表示新的文件对象。
>>> f = open("test.dat","w")
>>> print f
<open file 'test.dat', mode 'w' at fe820>
open函数接受两个参数,第一个参数为文件名称,第二个参数为模式,模式w表示已写模式打开文件。如果test.dat文件不存在,会创建该文件,如果已经存在,会被我们新写入的文件替代。
通过write方法我们可以往文件内写入数据:
>>> f.write("Now is the time")
>>> f.write("to close the file")
关闭文件可以把已经写入的数据真正写入文件中,我们可以通过read()方法读取已经写入的数据。
>>> f.close()
>>> f = open("test.dat","r")
>>> text = f.read()
read()方法也可以指定读取出来的字符数
>>> f = open("test.dat","r")
>>> text = f.read(5)
如果剩余的字符串不够,read方法返回剩下的所有的字符串,如果读取到文件尾,read方法返回一个空的字符串。
下面的函数拷贝一个文件,一次读取50个字符,第一个参数表示源文件,第二个参数表示新创建的文件。
def copyFile(oldFile, newFile):
    f1 = open(oldFile, "r")
    f2 = open(newFile, "w")
    while 1:
        text = f1.read(50)
        if text == "":
        break
    f2.write(text)
    f1.close()
    f2.close()
    return
break指令退出循环,执行流转到循环后面的第一条表达式。

11.1文本文件
文本文件包括可打印的字符以及空格符,以回车换行符为区分新的行,python提供了非常便捷的方式操作文本文件。
创建三行文本
>>> f = open("test.dat","w")
>>> f.write("line one\nline two\nline three\n")
>>> f.close()
readline方法每次读取一行文本
readlines方法按行的格式返回剩下的所有行。
下面的例子拷贝一个文件并过滤以#开头的文本行
def filterFile(oldFile, newFile):
    f1 = open(oldFile, "r")
    f2 = open(newFile, "w")
    while 1:
        text = f1.readline()
        if text == "":
            break
        if text[0] == '#':
            continue
        f2.write(text)
    f1.close()
    f2.close()
    return
continue结束当前的循环,进行下一次循环

11.2写变量
write方法的参数必须是字符串,如果我们想写入其他的值到文件,我们首先需要将其转换成字符串,可以调用str()方法。
也可以使用格式操作符%,如果应用在整形中,%表示取模,但是如果第一个操作数是字符串,%表示格式化操作符。第一个操作数是格式化字符串,第二个操作数是表达式元组,返回的结果是使用格式化字符串格式化之后的表达式值。
例如:“%d”表示表达式元组中的第一个表达式必须为数字
>>> cars = 52
>>> "%d" % cars
'52'
格式化字符串可以在字符串中的任意位置出现,因此我们可以将格式化后的值嵌入字符串。
>>> cars = 52
>>> "In July we sold %d cars." % cars
'In July we sold 52 cars.'
%f表示元组中对应的值必须为浮点数,%s表示对应的元组的值为字符串
>>> "In %d days we made %f million %s." % (34,6.1,'dollars')
'In 34 days we made 6.100000 million dollars.'
浮点数默认为六位有效小数。
我们可以更精确的控制格式化的格式,我们可以控制数值的位数
>>> "%6d" % 62
'     62'
>>> "%12f" % 6.1
'     6.100000'
>>> "%-6d" % 62
'62     '
>>> "%12.2f" % 6.1
'          6.10'
如果我们提供一个正数,而数字的位数少于该值那么会在数值的开头补充空格,如果提供一个负数,会在数值的结尾补充空格。

11.3文件夹
当你通过读取或者写创建新的文件的时候,这个新的文件会在当前工作目录下面创建,同样的,当你在代码中打开一个文件的时候,python也在当前工作目录下面寻找文件。
如果你要打开其他目录中的文件,那么必须指定具体的地址
>>> f = open("/usr/share/dict/words","r")

11.5异常
当程序运行的过程中发生错误的时候,会产生一个异常,python会打印异常信息并结束程序的运行。
>>> print 55/0
ZeroDivisionError: integer division or modulo
异常信息包括两个部分,第一个部分冒号前面异常的类型以及冒号后面异常的具体信息,某些时候我们执行可能产生异常的操作,但是我们不想异常发生之后停止程序,我们可以捕获并处理异常。
filename = raw_input('Enter a file name: ')
try:
    f = open (filename, "r")
except:
    print 'There is no file named', filename
try语句执行我们想执行的表达式,如果没有异常,那么忽略except语句,如果有异常发生,那么执行except分支,程序继续执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值