Python文件和异常处理

文章目录

  • Python文件和异常处理
    • 1.从文件中读取数据
      • 1.1 读取整个文件
      • 1.2 逐行读取文件
      • 1.3 创建一个包含文件各行内容的列表
    • 2.写入文件
      • 2.1写入文件
      • 2.2 附加到文件
    • 3.异常
      • 1.使用try-except代码块处理异常的一个例子
      • 2. try-except-else 代码块
    • 4.使用json模块存储数据
        • 1.json.dump()与json.load()
      • 2.应用:保存和读取用户生成的数据

Python文件和异常处理

1.从文件中读取数据

1.1 读取整个文件

  1. 首先建立演示文件pi_digits.txt,保存到和python程序相同的目录里

    3.1415926535
      8979323846
      2643383279
    
  2. Python实例

    with open('pi_digits.txt') as file_object:
        contents=file_object.read()
        print(contents)
    
    • open()函数——用于打开文件,参数接受要打开文件的名称,Python默认在当前执行文件所在目录中查找指定的文件(也可添加文件的相对路径或绝对路径)——函数返回一个表示文件的对象,Python将这个对象存储在将在后面使用的变量中(这里是file_object)

    • 关键字with在不再需要访问文件后将文件关闭。当然也可以调用**open()和close()**来将文件打开或关闭。

      **注:**若没有妥善关闭文件可能会 导致数据丢失或受损。所以不推荐close()

    • 将文件存储在file_object中后可调用read()方法读取文件的全部内容,并将其作为一个很长的字符串存在contents变量中。

1.2 逐行读取文件

要以每次一行的方式检查文件,可以对文件对象使用for循环

with open('pi_digits.txt') as file_object:
    #contents=file_object.read()
    #print(contents)
    for line in file_object:
        print(line)
#运行结果:
3.1415926535

  8979323846

  2643383279
  • 结果中的空行如此多的原因:原本的字符串中每行之后都有一个换行符,Print函数在打印的时候也会自己带一个换行符。

  • 可以通过使用字符串的rstrip()方法删除空行

    with open('pi_digits.txt') as file_object:
        for line in file_object:
            print(line.rstrip())
    

1.3 创建一个包含文件各行内容的列表

使用with时,open()返回的文件对象只在with的代码块内可用,若要在代码块中访问文件内容,在with代码块中将文件各行储存在一个列表中,并在代码块外使用该列表。

python实例

with open('pi_digits.txt') as file_object:
    lines=file_object.readlines()
    #readlines方法的功能就是读取文件的每一行然后返回一个列表
    
for line in lines:
    print(line.rstrip())

读取文件以后,就可以根据存储文件内容的变量类型对它进行操作

就已经介绍的内容来说,这些方法只能读入文件内容,并不能直接对文件本件进行修改。

2.写入文件

open()函数的第二个参数——控制打开文件的方式:

  • 'w’写入模式
  • 'r’读取模式(默认)
  • 'a’附加模式
  • 'r+'读写模式

2.1写入文件

filename='p.txt'

with open(filename,'w') as fileobject:
    file_object.write('zzzzzzzzz.')
  • 若要写入的文件不存在,函数open()将自动创建它;如果存在,python在返回文件对象前将清空该文件,也就是输入的内容将会覆盖文件中之前的内容。
  • write()方法,将一个字符串写入文件。该方法不会在写入的文本末尾添加换行符,若要输入多行文本,可以自己在字符串中加入\n

2.2 附加到文件

给文件添加内容,而不覆盖原本的内容,可以与附加模式打开文件。这样python不会在返回文件对象时清空文件。

写入到文件的行都将添加到文件末尾。

如果指定文件不存在,python将会自动创建一个空文件。

filename='p.txt'

with open(filename,'a') as fileobject:
    file_object.write('yyyyyyyyy.')

3.异常

python使用 被称为异常的特殊对象来管理程序执行期间发生的错误。

每当产生让python不知所措的错误时,会创建一个异常对象,如果编写了处理异常的代码,程序将继续运行;如果没有对异常进行处理,程序将停止,并显示一个traceback,包含有关异常的报告。

下面介绍处理异常的方法。

1.使用try-except代码块处理异常的一个例子

  • 以ZeroDivisionError异常为例子(除以0异常)
  • 原本长这个样子:
>>> print(19/0)
Traceback (most recent call last):
  File "", line 1, in 
ZeroDivisionError: division by zero
  • 使用try-expect代码块处理异常:
try:
    print(19/0)
except ZeroDivisionError:
    print('不可以除以0哦')
    
  • 如果想发生异常的时候python一声不吭的处理掉它,不要被别人直到,就可以在except代码块中用pass语句
  try:
      print(19/0)
  except ZeroDivisionError:
      pass
#这样,错误发生时,既不会出现tracebacka,也不会有任何的输出提示      

2. try-except-else 代码块

工作原理:

python尝试实行try代码块中的代码,只有可能引发异常的代码才需要放在try语句中。有时候,有一些仅在try代码块成功执行时才需要运行的代码;这些代码应该放在else代码块中。except代码块告诉python,如果它尝试运行try代码块中的代码时引发了指定异常,该这么办。

4.使用json模块存储数据

json模块可以将简单的python数据结构转储到文件中,并在文件再次运行时加载该文件中的数据。还可以使用json在python程序之间分享数据。

JSON数据格式也并非python专用,还可以与别的语言共用。

1.json.dump()与json.load()

  • json.dump()接受两个实参:要存储的数据以及可用于存储数据的文件对象。

    import json  #导入json模块
    
    numbers=[2,3,5,7,11,13]  #创建数字列表
    
    filename='numbers.json'  #指定要将该数字列表储存到其中的文							件的名称,并使用文件扩展名.json							指出文件存储的数据为json格式
    
    #以写入模式打开文件,让数据可以写入其中
    with open(filename,'w') as f_obj:  
        #使用json.dump()函数将数字列表存储到文件中
        json.dump(numbers,f_obj)
    
  • 打开文件查看结果,发现文件中数据的存储格式与python中的一样。

    [2,3,5,7,11,13]
    
  • json.load()将列表读取到内存中。

    import json
    
    filename='numbers.json'  #规定要读取的文件
    with open(filename) as f_obj:
        #使用json.load()加载存储在文件中的信息,并将其存储到变量numbers中
        numbers=json.load(f_obj)
        
    print(numbers)
    

2.应用:保存和读取用户生成的数据

对于用户生成的数据,如果不以某种方式进行存储,等程序停止运行时,用户的信息将丢失。

  • 例子:
import json
username=input('What is your name?')

filename='username.json'
with open(filename,'w') as f_obj:
    json.dump(username,f_obj)
    print("We'll remember you when you come back,"+username+'!')
import json

filename='username.json'

with open(filename) as f_obj:
    username=json.load(f_obj)
    print('Welcome back,'+username+'!')

你可能感兴趣的:(python)