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

Python入门 -6-文件和异常

2019-03-07 23:53 381 查看
  • 学习如何处理文件 让程序能够快速地分析大量的数据
  • 学习错误处理 避免程序在面对意外情形时崩溃
  • 学习异常:Python创建的特殊对象 用于管理程序运行时出现的错误
  • 学习模块 json 让你可以保存用户数据 以免在程序停止运行后丢失
  • 提升程序的适用性、可用性和稳定性

从文件中读取数据

将信息读取到内存中

with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents)

函数 open() 接受一个参数:要打开的文件的名称
关键字with在不再需要访问文件后将其关闭 也可以调用open()和close()来打开和关闭文件 但是并非在任何情况下都能轻松确定关闭文件的恰当时机
使用方法read()来读取这个文件的全部内容
但程序结果会多出来一个空行 因为read()到达文件末尾时返回一个空字符串 而将这个空字符串显示出来时就是一个空行 要删除末尾的空行可以在print语句中使用rstrip()

文件路径

当你将简单的文件名传递给函数open()时 Python将在当前执行的文件(即.py程序文件)所在的目录查找文件
提供文件路径

在linux 和 OSX中
with open('text_files/filename.txt') as file_object :
在windodws系统中
with open('text_files\felename.txt') as file_object :
  • 相对文件路径 :相对于当前运行的程序所在目录
  • 绝对文件路径 :

由于反斜杠在Python中被视为转义标志 为在windows中万无一失 应以原始字符串的方式指定路径 即在开头的单引号前加上r

逐行读取

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

filename = 'pi_digits.txt'

with open(filename) as file_object:
for line in file_object:
print(line)

调用open()后 将一个表示文件及其内容的对象存储到了变量file_object 中
这样打印出来的空白行更多了 因为每行都有一个看不见的换行符 print语句也会加上一个换行符 消除多余的空白行 可在print语句中使用rstrip()

创建一个包含文件各行内容的列表
filename = 'pi_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines()

for line in lines:
print(line.rstrip)

方法readlines()从文件中读取每一行 并将其存储在一个列表中

使用文件的内容
filename = 'pi_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines()

pi_string = ''
for line in lines:
pi_string += line.strip()

print(pi_string)
print(len(pi_string))

注意 读取文本文件时 Python将其中的所有文本都解读为字符串 如果你读取的是数字 并要将其作为数值使用 就必须使用函数int()将其转换为整数 或者使用函数float()将其转换为浮点数

对于可处理的数据量 Python 没有任何限制 只要系统的内存足够多 想处理多少数据都可以

可使用方法replace()将字符串中的特定单词都替换为另一个单词
>>> message = " I really like dogs."
>>> message.replace('dog', 'cat')
'I really like cats.'
写入文件
filename = 'programming.txt'

with open(filename, 'w') as file_object:
file_object.write("I love programming.")

调用open()时提供两个实参 第一个实参是要打开的文件的名称 第二个实参(‘w’) 告诉Python 要以写入模式打开这个文件
读取模式(默认):r
写入模式:w
附加模式:a
读取加写入:r+
如果写入的文件不存在 函数open()会自动创建它
以写入模式打开时 如果指定的文件已经存在 Python将在返回文件对象前清空该文件

注意 Python 只能将字符串写入文本文件 要将数值数据存储到文本文件中 必须先使用函数str()将其转换为字符串格式

异常

使用try-except 代码块处理
优点:避免用户看到traceback ; 让程序能够继续分析能够找到的其他文件

处理ZeroDivisionError异常
try:
print(5/0)
except ZeroDicisionError:
print("You can't divide by zero!")

如果try代码块中的代码运行起来没有问题 Python将跳过expect代码块 如果try代码块中的代码导致了错误 Python将查找这样的except代码块 并运行其中的代码 即其中指定的错误与引发的错误相同

使用异常避免崩溃 else代码块

依赖于try代码块成功执行的代码都应放在else代码块中

处理FileNotFoundError 异常

找不到文件异常

分析文本

Gutenberg(http://gutenberg.org/) 项目中提供了一系列不收版权限制的文学作品

>>>title = "Alice in Wonderland"
>>>title.split()
['Alice' , 'in' , 'Wonderland' ]

方法split()以空格为分隔符将字符串分拆成多个部分 并将这些部分都存储到一个列表中

失败时一声不吭

pass语句

决定报告哪些错误

用户输入 存在指定的文件 有网络链接 就有可能出现异常 凭借经验可以判断该在程序的什么地方包含异常处理块 以及出现错误时该向用户提供多少相关信息

存储数据

模块json让你能够将简单的Python数据结构转储到文件中 并在程序再次运行时加载该文件中的数据
还可以使用json在Python程序之间分享数据 更重要的是 JSON数据格式并非Python专用的 这让你能够以JSON格式存储的数据与其他编程语言的人分享 这是一种轻便格式 很有用 也易于学习

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

json.dump() : 编写一个存储一组数字的尖端程序 使用json.dump() 来存储这组数据
接受两个实参 要存储的数据以及可用于存储数据的文件对象
json.load() : 编写一个将数字读取到内存中的程序

重构

将代码划分为一系列完成具体工作的函数
每个函数都执行单一而清晰的任务

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