您的位置:首页 > 编程语言 > Python开发

Python基础学习-文件和异常(四)

2019-03-05 21:15 218 查看

1 文件

1.1 从文件中读取数据

(1)读取整个文件

# xx表示文件名,yy表示文件的对象
with open('xx') as yy:

要以任何方式使用文件—哪怕仅仅是打印其内容,都得先打开文件,这样才能访问它。函数open()接受一个参数:要打开的文件的名称。Python在当前执行的文件所在的目录中查找指定的文件。
关键字with 在不再需要访问文件后将其关闭。在这个程序中,注意到我们调用了open(), 但没有调用close();你也可以调用open() 和close() 来打开和关闭文件,但这样做时,如果程序存在bug,导致close() 语句未执行,文件将不会关闭。这看似微不足道,但未妥善地关闭文件可能会导致数据丢失或受损。如果在程序中过早地调用close(),你会发现需要使用文件时它已关闭(无法访问), 这会导致更多的错误。并非在任何情况下都能轻松确定关闭文件的恰当时机,但通过使用前面所示的结构,可让Python去确定:你只管打开文件,并在需要时使用它,Python自会在合适的时候自动将其关闭。
创建一个文件.txt文件,内容为随意的三行数字,例如下图:

4355465
4464665
1645954

读取整个文件

with open(r'C:\Users\19248\Desktop\pro\numbers.txt') as file_object:
context = file_object.read()
print(context.rstrip())

输出:

4355465
4464665
1645954

细节:
(1)open()函数中r,表示不转义,使用真实字符。
(2)路径有相对路径和绝对路径,这里如果直接写一个文件名,那么这个文件就必须在这个工程里面,否则程序就会报错,找不到这个文件,对于绝对路径来说,随便放在哪个文件夹中,只要绝对路径正确就可以找到。对于路径中使用的是反斜杠(\ )而不是斜杠(/ )
(2)逐行读取

with open(r'C:\Users\19248\Desktop\pro\numbers.txt') as file_object:
for line in file_object:
print(line.rstrip())

这里在结尾加了一个rstrip()函数,这个函数删除(剥除)字符串末尾的空白
(3)创建一个包含文件各行内容的列表
方法readlines() 从文件中读取每一行,并将其存储在一个列表中

with open(r'C:\Users\19248\Desktop\pro\numbers.txt') as file_object:
lines = file_object.readlines()

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

输出:

4355465
4464665
1645954

1.2 写入文件

(1)写入文件

filename = r'C:\Users\19248\Desktop\pro\numbers.txt'
with open(filename,'w') as file_object:
file_object.write("I love programming.")

结果:

写入模式 w
读取模式 r
附加模式 a
读写模式 r+

注意:
在写入多行时,需要指定换行符
(3)附加到文件
给文件添加内容,而不是覆盖原有的内容,可以选择附加模式打开文件,在写入到文件的行都将添加到文件末尾。如果指定的文件不存在,Python将为你创建一个空文件。

filename = r'C:\Users\19248\Desktop\pro\numbers.txt'
with open(filename,'w') as file_object:
file_object.write("I love programming")
file_object.write(",but I don't like study\n")

结果显示:

2 异常

2.1 使用异常避免崩溃

try-except-else代码块的工作原理如下:将可以引发异常的代码放在try语句中,如果try中的代码出现异常,就执行except中的代码,如果try中的代码没有出现异常,如果有else,就执行else中的语句。

print("Give me two numbers,and I'll divide them.")
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:
print("You can't divide by 0!")
else:
print(answer)

输出:

常见异常汇总:

AttributeError 试图访问一个对象没有的属性
IOError 输入/输出异常;基本上是无法打开文件
SyntaxError Python代码非法,代码不能编译
TypeError 传入对象类型与要求的不符合
KeyError 试图访问字典里不存在的键
NameError 使用一个还未被赋予对象的变量
IndexError 下标索引超出序列边界
FileNotFoundError 找不到文件

2.2 pass语句

在函数中使用pass语句,将什么都不做,继续运行。

3 存储数据

3.1 使用json.dump() 和json.load()

json是一种数据交换格式
json.dump()是存储数据,接受两个实参:要存储的数据以及可用于存储数据的文件对象
如下:

import json

numbers = [1,2,3,4]

filename = 'numbers.json'
with open(filename,'w') as f_obj:
json.dump(numbers, f_obj)

输出:

json.load()读取写入的文件,参数是文件对象

下面是一个dump()和load()的结合使用:
尝试打开username.json文件。如果这个文件存在,就将其中的用户名读取到内存中,再执行else 代码块,即打印一条欢迎用户回来的消息。用户首次运行这个程序时,文件username.json不存在,将引发FileNotFoundError 异常,因此Python将执行except 代码块:提示用户输入其用户名,再使用json.dump() 存储该用户名, 并打印一句问候语。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: