Python基础知识文件和异常
Posted Carl39
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于Python基础知识文件和异常的主要内容,如果未能解决你的问题,请参考以下文章
Python基础 -- 函数局部变量和全局变量文件(包含序列化和反序列化)异常