zoukankan      html  css  js  c++  java
  • 【Python基础知识】(九)文件和异常

    读取文件

    1、读取和程序位于同一目录下的文件

      假设已经创建了一个文本文件pi_digits.txt,内容是精确到小数点后30位的圆周率值,且在小数点后每10位处都换行。如下所示:

    3.1415926535
      8979323846
      2643383279

      下面的程序将打开并读取这个文件,再将其内容打印到屏幕上。注意:不论是以任何方式使用文件,都要先打开它。

    '''文件名:file_reader.py'''
    with open('pi_digits.txt') as file_object:
    '''定义变量file_object作为表示文本文件的对象''' contents
    = file_object.read() print(contents)

      该程序中的open()函数执行打开文件的操作,它接受文件的名称作为参数,并返回一个表示该文件的对象。Python将这个对象存储在变量file_object中,以便后续使用。

      方法.read()会读取这个文件的全部内容,并将其作为一个长长的字符串存储在变量contents中。这样,通过打印contents的值,就可以将这个文本文件的全部内容显示出来。

      注意:当不指明文件路径时,Python只会在当前执行文件所在的目录中查找指定的文件,即file_reader.py

    输出为:

    3.1415926535
      8979323846
      2643383279

       方法.read()到达文件末尾时返回一个空字符串,这个空字符串在输出中显示出来就是一个空行。可通过在print语句中使用方法.rstrip()的方式来删除这个空行。

    2、提供文件路径来读取文件

       当要打开不在程序文件所属目录中的文件时,可通过提供该文件存储路径的方式使Python找到该文件并打开。路径分为相对文件路径绝对文件路径两种。当给出相对文件路径时,要求该文件位于存储执行程序的文件夹内,并且需要给出它直接存储的文件夹,因为Python此时只会在给出的文件夹下查找,而不会再进入该文件夹的子文件夹查找

    '''在Windows系统中,文件路径使用反斜杠();而在Linux和OS X中,使用斜杠(/)'''

    with open('text_filesfilename.txt') as file_object:
    '''提供相对文件路径,Python将在该文件夹下查找(不查找子文件夹)'''
    file_path
    = 'C:Usersehmatthesother_fies ext_filesfilename.txt'
    '''当文件路径过长时,也可以将路径作为字符串存储在一个变量中'''
    with open(file_path) as file_object:
    '''提供绝对文件路径,Python将在指定的文件夹中查找'''

     3、逐行读取文件

      读取文件时,常常需要检查其中的每一行:你可能要在文件中查找特定的信息,或者要以某种方式修改文件中的文本。此时可以通过使用循环来遍历文件的每一行。

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

      同样的,使用.rstrip()可消除每一行末的换行符,进而消除输出中的空白行。

       也可以通过将文件存入一个列表的方式,使得可以在with代码块外访问该文件的内容。

    filename = 'pi_digits.txt'
    with open(filename) as file_object:
        lines = file_object.readlines()
    '''将文件存入新建的列表lines。方法.readlines()从文件读取每一行,并将每一行文字作为字符串存储入列表中'''
    for line in lines:
        print(line.rstrip())

      

      下列程序可让文件作为一个长字符串输出

    filename = 'pi_digits.txt'
    with open(filename) as file_object:
        lines = file_object.readlines()
    
    '''定义字符串变量pi_string,初始值为空字符串''' pi_string
    = ''
    '''将文件一行一行的拼接起来,存入pi_string中'''
    for line in lines: pi_string += line.strip() print(pi_string)
    '''还可以求整个文件的长度'''
    print(len(pi_string))

    输出为:

    3.141592653589793238462643383279
    32

    4、在文件中查找信息

    '''在圆周率中查找某人的生日'''
    filename = 'pi_digits.txt' with open(filename) as file_object: lines = file_object.readlines() pi_string = '' for line in lines: pi_string += line.strip() birthday = input("Enter your birthday in numbers: ") if birthday in pi_string: print("Found.") else: print("Not Found.")

    操作文件

      当open函数中只有一个参数时,Python会默认以只读方式('r')打开这个文件;当有两个参数时,Python会根据第二个参数确定对文件进行操作的方式。不同的操作方式有只读模式'r',只读取文件)、写入模式'w'清空原有文件内容并写入,如果文件不存在则自动创建)、附加模式'a',在原文件末尾添加内容,如果文件不存在则自动创建)以及读取和写入文件模式'r+','r'+'a')

      注意:Python只能将字符串写入文本文件,如果想要将其他类别的内容(如数值数据)存储到文本文件中,要先使用str()转换为字符串格式。

    filename = 'programming.txt'
    
    '''在写入模式写入内容'''
    with open(filename,
    'w') as file_object: file_object.write("I love programming. ") file_object.write("I love creating new games. ") '''在附加模式添加内容'''
    with open(filename,
    'a') as file_object: file_object.write("I also love swimming. ") file_object.write("I also love reading. ")

    输出为:

    I love programming.
    I love creating new games.
    I also love swimming.
    I also love reading.

      函数write()不会在写入和附加的文本末尾添加换行符,如果需要换行的话要记得自行添加。

    异常

    1、异常的概念

      Python使用被称作异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常,异常将指示Python当出现该错误时应该怎么做,而不是显示traceback给用户。异常是使用try-except代码块处理的。

      例如,当我们输入一行有错误的代码时:

    print(5/0)

       当没有编写处理异常的代码时,Python会进行报错:

    Traceback (most recent call last):
      File "Hello World.py", line 1, in <module>
        print(5/0)
    ZeroDivisionError: division by zero

       当你认为某个地方可能发生错误时,就可以用try-except来编写一段代码,来处理可能引发的异常

    try:
        print(5/0)
    '''给出一种可能会出现错误的输入'''
    except ZeroDivisionError: print("You can't divide by zero!")
    '''指示Python当上述代码出现ZeroDivisionError错误时该如何处理'''

       这样,当出现同样的错误时,用户将看到一条友好的错误信息,而不是traceback。

    You can't divide by zero!

    2、异常的实际应用

      通过在程序中编写相关代码,可有效防止程序在某些特定情况下崩溃。并且,当程序没有出现异常时,我们还能使用else语句添加新的代码,这些代码在程序出现异常时不会被执行。

    print("Enter 'q' to quit.")
    while True:
        first_number = input("
    First number: ")
        if first_number == 'q':
            break
        second_number = input("Second number: ")
      '''处理ZeroDivisionError异常的代码'''
    try: answer = int(first_number) / int(second_number) except ZeroDivisionError: print("You can't divide by 0!")
      '''当程序没有出现异常时执行'''
    else: print(answer)

      

      类似的,还可以编写处理FileNotFoundError(找不到文件)异常的代码。

    filename = 'alice.txt'
    try:
        with open(filename) as f_obj:
            contents = f_obj.read()
    except FileNotFoundError:
        message = "Sorry, the file " + filename + " does not exist."
        print(message)
    '''当程序没有出现异常时执行'''
    else'''计算文件中包含的单词数''' words = contents.split() num_words = len(words) print("The file " + filename + " has about " + str(num_words) + " words.")

      特别的,当你希望程序在出现异常时不进行任何操作,就像无事发生一样继续进行时,可以在except中使用pass语句,它会指示Python什么都不做

    print("Enter 'q' to quit.")
    while True:
        first_number = input("
    First number: ")
        if first_number == 'q':
            break
        second_number = input("Second number: ")
        try:
            answer = int(first_number) / int(second_number)
        except ZeroDivisionError:
            pass
        else:
            print(answer)

    参考书籍:《Python编程:从入门到实践》

    2020-07-27

  • 相关阅读:
    3D切割轮播图
    网站公共部分的复用
    Git的安装及布置
    完整轮播图
    百度检索例子
    第五章 pycharm编辑器安装和使用
    第四章 散列类型的方法
    第一章 认识爬虫以及环境安装
    主机访问Ubuntu虚拟机的jupyter
    12306购票的testerSunshine带源码刷票
  • 原文地址:https://www.cnblogs.com/carl39/p/13371226.html
Copyright © 2011-2022 走看看