python----文件和异常

文章目录

目录

文章目录

前言

1 从文件中读取数据

1.1 读取整个文件

1.2逐行读取

1.3创建一个文件各行的列表

2 写入文件

2.1 写入空文件

2.2 写入多行

2.3 附加到文件

3.异常

3.1 处理ZeroDivisionError异常

3.2 使用异常避免崩溃

3.3重构

总结



前言

在本章中,我们将学习处理文件,让程序能够快速地分析大量数据;你将学习错误处理,比年报程序在面对意外情形中崩溃;你将学习异常,用于管理程序运行时出现的错误。


1 从文件中读取数据

1.1 读取整个文件

要读取文件,需要一个包含几行文本的文件,如下

pi_digits.txt
3.1415926535
  8979323846
  2643383279

它包含精确到小数点后30位的圆周率,且在小数点后每10位处都换行,然后将本文件保存在本章程序所在目录中

#打开文件并且读取
 with open('pi_digits.txt') as file_object:
     contents = file_object.read()
     print(contents.rstrip())

Python在当前执行的文件所在目录中查找指定的文件,函数open()返回一个表示文件的对象

我们能用open()和close()来打开和关闭文件,但是这样做,如果程序存在bug,导致close()语句未执行,文件将不会关闭,从而导致数据丢失。有了pi_digits.txt的文件对象后,我们使用方法read()读取这个文件的全部内容,并将其作为一个长长的字符串存储在变量contents中,这样,通过打印contents的值,就可将这个文本文件的全部内容显示出来。当然在使用open()函数的时候,要注意文件的路径,在上述程序中因为文件和程序在同一路径下所以使用的是相对路径,也可以使用绝对路径。

1.2逐行读取

#逐行读取
 filename = 'pi_digits.txt'
 with open(filename) as file_object:
     for line in file_object:
         print(line.rstrip())

1.3创建一个文件各行的列表

#创建一个包含文件各行内容的列表
 filename = 'pi_digits.txt'
 with open(filename) as file_object:
     lines = file_object.readlines()

 for line in lines:
     print(line.rstrip())

注意:读取文件时,python见其中的所有文本都解读为字符串,如果你读取的是数字,并要将其作为数值使用,就必须使用函数int()将其转换成整数,或使用函数float()将其转换成浮点数

2 写入文件

2.1 写入空文件

#写入空文件
 filename = 'pi_digits.txt'
 with open(filename,'w') as file_object:
    file_object.write("I LOVE PROGRAMMING.")

在使用open()函数时间你需要提供两个实参,第一个实参也是要打开的文件的名称:第二个实参(’w‘),我们要以写入模式打开这个文件,打开文件时,可指定读取模式(’r‘),写入模式(’w‘),附加模式(’a‘)或让你能偶读取和写入文件的模式(’r+‘)如果你省略了模式实参,python将以默认的只读模式打开文件,注意,Python只能将字符串写入文本文件,要将数值数据存储到文本文件中,必须先使用函数str()将其转换成字符串格式。

2.2 写入多行

filename = 'pi_digits.txt'
with open(filename,'w') as file_object:
   file_object.write("I LOVE PROGRAMMING.\n")
   file_object.write("I LOVE CREATING NEW GAMES")

2.3 附加到文件

如果你要给文件添加内容,而不是覆盖原有的文件,可以使用附加模式打开文件。

filename = 'pi_digits.txt'#添加文件不覆盖其他的内容
with open(filename,'a') as file_object:
   file_object.write("I also love finding meaning i large datasets\n")
   file_object.write("I love creating apps that can run in a browser\n")

最终的结果就是,文件原来的内容还在,他们后面时我么刚添加的内容

3.异常

异常是使用try-except代码块处理。try-except代码块让python执行 指定的操作,同时告诉python发生异常时该怎么办

3.1 处理ZeroDivisionError异常

try:
    print(5/0)
except ZeroDivisionError:
    print("You can not divide by zero")

这样用户看到的就是一条友好的消息而不是traceback

3.2 使用异常避免崩溃

#异常:可以用try-except代码块处理的,try-except代码块让python执行指定的操作

print("give me two numbers,and i will divide them.")
print("Enter 'q' to  quit")

while True:
    first_number = input("\nFirst number: ")
    if first_number == 'q':
        break
    second_number = input("Second number:")
    if second_number == 'q':
        break
    try:
        answer = int(first_number)/int(second_number)
    except ZeroDivisionError:
        print("can not")
    print(answer)

决定报告那些错误,知道在什么情况下向用户报告错误,在什么情况下有应该在失败的时候一声不吭,如果用户知道要分析那些文件,他们可能希望在有文件没有分析时,将其中的原因告诉他们。Python的错误处理结构让你能够细致地控制与用户分线错误信息的程度,要分享多少信息由你决定。

3.3重构

你经常会遇到这样的情况:代码能够正常运行,但可做进一步的改进-将代码划分为一系列完成具体工作的函数。这样的过程称为重构。重构让代码更清晰,更容易扩展。


总结

你学习了:如何使用文件;如何一次性读取整个文件,以及如何以每次一行的方式读取文件的内容;如何写入文件,以及如何将文本附加到文件末尾;什么是异常以及如何处理程序可能引发的异常;如何存储python数据结构,以保存用户提供的信息,避免用户每次运行程序时都需要重新提供

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值