【Python基础知识】(九)文件和异常
2020-12-18 16:34
标签:reader ast name python编程 mat 存在 open() 参数 min 假设已经创建了一个文本文件pi_digits.txt,内容是精确到小数点后30位的圆周率值,且在小数点后每10位处都换行。如下所示: 下面的程序将打开并读取这个文件,再将其内容打印到屏幕上。注意:不论是以任何方式使用文件,都要先打开它。 该程序中的open()函数执行打开文件的操作,它接受文件的名称作为参数,并返回一个表示该文件的对象。Python将这个对象存储在变量file_object中,以便后续使用。 方法.read()会读取这个文件的全部内容,并将其作为一个长长的字符串存储在变量contents中。这样,通过打印contents的值,就可以将这个文本文件的全部内容显示出来。 注意:当不指明文件路径时,Python只会在当前执行文件所在的目录中查找指定的文件,即file_reader.py。 输出为: 方法.read()到达文件末尾时返回一个空字符串,这个空字符串在输出中显示出来就是一个空行。可通过在print语句中使用方法.rstrip()的方式来删除这个空行。 当要打开不在程序文件所属目录中的文件时,可通过提供该文件存储路径的方式使Python找到该文件并打开。路径分为相对文件路径和绝对文件路径两种。当给出相对文件路径时,要求该文件位于存储执行程序的文件夹内,并且需要给出它直接存储的文件夹,因为Python此时只会在给出的文件夹下查找,而不会再进入该文件夹的子文件夹查找。 读取文件时,常常需要检查其中的每一行:你可能要在文件中查找特定的信息,或者要以某种方式修改文件中的文本。此时可以通过使用循环来遍历文件的每一行。 同样的,使用.rstrip()可消除每一行末的换行符,进而消除输出中的空白行。 也可以通过将文件存入一个列表的方式,使得可以在with代码块外访问该文件的内容。 下列程序可让文件作为一个长字符串输出: 输出为: 当open函数中只有一个参数时,Python会默认以只读方式(‘r‘)打开这个文件;当有两个参数时,Python会根据第二个参数确定对文件进行操作的方式。不同的操作方式有只读模式(‘r‘,只读取文件)、写入模式(‘w‘,清空原有文件内容并写入,如果文件不存在则自动创建)、附加模式(‘a‘,在原文件末尾添加内容,如果文件不存在则自动创建)以及读取和写入文件模式(‘r+‘,‘r‘+‘a‘) 注意:Python只能将字符串写入文本文件,如果想要将其他类别的内容(如数值数据)存储到文本文件中,要先使用str()转换为字符串格式。 输出为: 函数write()不会在写入和附加的文本末尾添加换行符,如果需要换行的话要记得自行添加。 Python使用被称作异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常,异常将指示Python当出现该错误时应该怎么做,而不是显示traceback给用户。异常是使用try-except代码块处理的。 例如,当我们输入一行有错误的代码时: 当没有编写处理异常的代码时,Python会进行报错: 当你认为某个地方可能发生错误时,就可以用try-except来编写一段代码,来处理可能引发的异常。 这样,当出现同样的错误时,用户将看到一条友好的错误信息,而不是traceback。 通过在程序中编写相关代码,可有效防止程序在某些特定情况下崩溃。并且,当程序没有出现异常时,我们还能使用else语句添加新的代码,这些代码在程序出现异常时不会被执行。 类似的,还可以编写处理FileNotFoundError(找不到文件)异常的代码。 特别的,当你希望程序在出现异常时不进行任何操作,就像无事发生一样继续进行时,可以在except中使用pass语句,它会指示Python什么都不做。 参考书籍:《Python编程:从入门到实践》 2020-07-27 【Python基础知识】(九)文件和异常 标签:reader ast name python编程 mat 存在 open() 参数 min 原文地址:https://www.cnblogs.com/carl39/p/13371226.html读取文件
1、读取和程序位于同一目录下的文件
3.1415926535
8979323846
2643383279
‘‘‘文件名:file_reader.py‘‘‘
with open(‘pi_digits.txt‘) as file_object:
‘‘‘定义变量file_object作为表示文本文件的对象‘‘‘
contents = file_object.read()
print(contents)3.1415926535
8979323846
2643383279
2、提供文件路径来读取文件
‘‘‘在Windows系统中,文件路径使用反斜杠(\);而在Linux和OS X中,使用斜杠(/)‘‘‘
with open(‘text_files\filename.txt‘) as file_object:
‘‘‘提供相对文件路径,Python将在该文件夹下查找(不查找子文件夹)‘‘‘
file_path = ‘C:\Users\ehmatthes\other_fies\text_files\filename.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)
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.")操作文件
filename = ‘programming.txt‘
‘‘‘在写入模式写入内容‘‘‘
with open(filename, ‘w‘) as file_object:
file_object.write("I love programming.\n")
file_object.write("I love creating new games.\n")
‘‘‘在附加模式添加内容‘‘‘
with open(filename, ‘a‘) as file_object:
file_object.write("I also love swimming.\n")
file_object.write("I also love reading.\n")I love programming.
I love creating new games.
I also love swimming.
I also love reading.
异常
1、异常的概念
print(5/0)
Traceback (most recent call last):
File "Hello World.py", line 1, in
try:
print(5/0)
‘‘‘给出一种可能会出现错误的输入‘‘‘
except ZeroDivisionError:
print("You can‘t divide by zero!")
‘‘‘指示Python当上述代码出现ZeroDivisionError错误时该如何处理‘‘‘You can‘t divide by zero!
2、异常的实际应用
print("Enter ‘q‘ to quit.")
while True:
first_number = input("\nFirst 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)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.")print("Enter ‘q‘ to quit.")
while True:
first_number = input("\nFirst 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)
上一篇:学习java第22天
文章标题:【Python基础知识】(九)文件和异常
文章链接:http://soscw.com/index.php/essay/37124.html