Python从入门到实践(九)——文件和异常


前言

本章中我们将学习处理文件,处理大量无数据,我们将学习错误处理,避免程序因错误而奔溃,我们将学习异常,我们将学习模块json
学习处理文件和保存数据可以让你的程序使用起来更容易
学习处理异常可以帮助你应对文件中不存在的情形,以及处理可能导致程序崩溃的问题


一、文件与异常

从文件中读取数据

在处理文件时,从文件中读取数据时最基本的任务。将文件中的信息读取到内存中,我们可以一次性读取文件中的所有内容,也可以每一行逐步读取。

读取整个文件
with open(‘python.txt’) as file_object:
contents=file_object.read()
关键字with在不需要访问文件的时候将文件关闭,open()函数是打开文件并返回一个表示文件的对象。关键字as就是前面学的给文件另命名。
read()函数读取该文件中的全部内容,并将其作为一个长长的字符串储存在content中,read()函数在到达文件末尾时返回一个空字符串,这个空字符串显示出来就是一个空行,可以用rstrip()函数删去末尾的空行。

文件路径
在查找文件时,有两种确定文件位置的方法,一种是相对路径法,另一种是绝对路径法。
相对路径:就是指被打开的文件相对于该文件的相对位置,注意在文件的路径中使用反斜杠\而不是斜杠/。
绝对路径:就是指被打开的文件在电脑中的位置,一般从C、D盘开始。

逐行读取
要以每次一行的方式读取文件,可以使用for语句。
用for语句时,会发现换行符变多了,这是因为文件本身就有一个换行符,而print函数中也会自动生成一个换行符。
同样可以使用rstrip函数来消去。

创建一个包含各行内容的列表
使用关键字with时,想要调用文件的内容,只能在with结构内部使用。可以使用函数readlines(),readlines()从文件中读取每一行,并将其储存在一个列表中。之后再用for语句遍历即可。

使用文件的内容
在读取到文件中的内容后,只需要将该内容赋值给变量,我们就可以使用该文件的内容了,不过要注意文件中换行时的空格问题。

生日是否包含在字符串中
使用in语句即可。

2.写入文件

要将文本写入文件,调用open函数需要提供两个参数,第一个是文件的名称,第二个是“w”,告诉python我们将要往文档中写入内容,注意,若是文档中原先就有内容,python会将内容清空。
默认情况下,第二个参数是‘r’为读取模式,
还有一种情况为‘a’,是附加模式,python不会把原先的内容清空。
写入文件的操作为write()函数,write函数不会像print函数那样,在结尾自动换行,所以文件中要是有换行的需要,需要手动换行

3.异常

在python中若是程序出现了错误,会返回一个traceback信息,这个信息对于程序员解决问题很有必要,但是却会让用户感到费解,所以我们不需要将traceback信息呈现给用户,反而应该用一种给通俗的表达。

使用try-except代码块
将可能发生错误的代码块放在try之后,将代码块发生错误的反应放在except之后,当代码块发生错误时,将运行except后的代码。
使用try except代码块会使程序更加容错,当程序发生错误时,程序不会崩溃,反而是发出一条友好的信息。

else代码块
在try-except 中还应该包括一个代码块运行成功之后的结果,这个结果应该放在else中。

处理ZeroDivisionError和FileNoFoundError
除0错误很简单,只要在除0之前加入try-except-else代码块即可
文件未找到错误,也可以用try-except-else代码块解决。

失败时一声不吭
可以用pass语句,它提醒你程序的某个地方什么都没干,并且以后将要干什么。

4.存储数据

程序将用户的信心存放到列表或者字典中时,我们需要保存这种数据,一种简单的方式时json来存储数据。

使用json.dump()和json.load()
json.dump是用来存储数据的,json.load是用来将这些数据读取到内存中。
json.dump接受两个参数,一个是存储数据的对象,一个是将要存储到其中的文件的名称。通常使用文件扩展名.json来表明文件储存的数据为JSON格式。
json.load()将数据读取到内存中。它接受.json格式的文件。

保存和读取用户生成的数据
有了以上的两个函数,我们就能够很轻松的对用户数据进行保存了。
我们可以用json.dump()来创建一个关于用户数据的json格式的文件,从而实现保存用户数据。
用json.load()来读取已有的用户信息。

重构
代码能能够正常的运行,但是将可做进一步的改进——将代码划分为一些列完成具体工作的函数,这样的过程成为重构。

二、代码

1.

代码如下:


#学习笔记


file_name='Python_notebook.txt'
"""
with open(file_name,'w') as file_object:
    file_object.write('In Python you can learn some knowledge of list\n')
    file_object.write('In Python you can learn some knowledge of dictionary\n')
    file_object.write('In Python you can learn lots of knowledge\n')   
with open(file_name) as file_object:
    x=file_object.read()
    print(x.rstrip())
with open(file_name) as file_object:
    for line in file_object:
        print(line.rstrip())
with open(file_name) as file_object:
    lines=file_object.readlines()

note=''
for line in lines:
    note+=line
print(note)

"""

#C语言学习笔记
with open(file_name) as file_object:
    lines=file_object.read()
    while True:
        x=lines.replace('Python',"C")
        if 'Python' not in x:
            break
file_name=file_name.replace('Python','C')
with open(file_name,'w') as file_object:
    file_object.write(x)
with open(file_name) as file_object:
    print(file_object.read().rstrip())

#多个访客
while True:
    guest=input("input 'q' to exit,so what's your name: ")
    if guest=='q':
        break
    else:
        with open('guest.txt','a') as file_object:
            file_object.write(guest+'\n')
            print('hi! '+guest)
#关于程序的调查
while True:
    reason=input("input 'q' to exit,so what's the reason why you like programming: ")
    if reason=='q':
        break
    else:
        with open('reason.txt','a') as file_object:
            file_object.write(reason+'\n')
            print('I know,'+reason)   


#加法运算,类型错误
while True:

    try:
        y=int(input('请输入第一个数字'))
        x=int(input('请输入第二个数字'))
        z=x+y
    except ValueError:
        print('请输入正确的数字类型')
    else:
        print(z) 
#沉默的猫和狗
file_name=input('请输入文档名称,带后缀')
try:
    with open(file_name) as file_object:
        x=file_object.read().rstrip()
        print(x)
except FileNotFoundError:
    #print('文件不存在')
    pass

#喜欢的数字
import json

file_name='favorite_number.json'
"""
with open(file_name,'w') as file_object:
    json.dump(input('请输入你最喜欢的数字'),file_object)
with open(file_name) as file_object:
    numbers=json.load(file_object)
with open(file_name) as file_object:
    x=file_object.read().rstrip()
    print('your favourite number is '+x)

    """

#记住喜欢的数字
try:
    with open(file_name) as file_object:
        x=file_object.read().rstrip()
except FileNotFoundError:
    with open(file_name,'w') as file_object:
        json.dump(input('请输入你最喜欢的数字'),file_object)
    with open(file_name) as file_object:
        numbers=json.load(file_object)
        print('your favourite number is '+numbers)
else:
    print('I have remembered your favorite number,that is '+x)
#验证用户

def get_stored_username():
    filename='username.json'
    try:
        with open(filename) as f_obj:
            username=json.load(f_obj)
    except FileNotFoundError:
        return None
    else:
        return username

def get_new_username():
    username=input("what's your name?")
    filename='username.json'
    with open(filename,'w') as f_obj:
        json.dump(username,f_obj)
        return username

def greet_user():
    username=get_stored_username()
    if username:
        x=input('Is '+username+' your name?(yes/no)')
        if x.lower()=='yes':
            print('welcome back! '+username)
        elif x.lower()=='no':
            username=get_new_username()
            print("I'll remember you, "+username)
    else:
        username=get_new_username()
        print("I'll remember you, "+username)
greet_user()


总结

本章学习了文件、异常与存储数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java文件压缩与解压缩实践是指利用Java编程语言实现对文件文件夹进行压缩和解压缩操作。以下是该实践的描述: 技术概述: Java文件压缩与解压缩是指将一个或多个文件文件夹打包成一个压缩文件,或者将压缩文件解压缩成原始文件的过程。 常见的压缩格式包括ZIP、GZIP、TAR等,Java提供了相应的API来实现对这些格式的操作。 功能特点: 文件压缩:将一个或多个文件文件夹压缩成一个压缩文件,减小文件大小,便于存储和传输。 文件解压缩:将压缩文件解压缩成原始文件,恢复文件的原始内容和结构。 支持多种压缩格式:Java提供了对多种常见压缩格式的支持,如ZIP、GZIP等。 异常处理:处理压缩和解压缩过程中可能出现的异常,保证程序的稳定性和可靠性。 技术实现: 压缩API:Java提供了java.util.zip和java.util.jar包来实现文件的压缩和解压缩操作。 压缩算法:通过选择不同的压缩算法,如DEFLATE算法用于ZIP格式,实现对文件的压缩。 流操作:使用Java的输入输出流(InputStream、OutputStream)来读取和写入文件内容。 异常处理:通过捕获并处理IOException等异常,确保程序在压缩和解压缩过程中的稳定性。 应用领域: Java文件压缩与解压缩实践广泛应用于文件备份、数据传输、打包软件、日志管理等各个领域。 在网络传输中,可以将多个文件打包成一个压缩文件进行传输,减少传输时间和网络带宽的消耗。 在软件开发中,可以将项目源代码、资源文件等打包成压缩文件进行发布和分享。 通过Java文件压缩与解压缩实践,可以方便地对文件进行打包和解包操作,提高文件的管理和传输效率。
第1章 HDFS HA及解决方案 1.1 HDFS系统架构 1.2 HA定义 1.3 HDFS HA原因分析及应对措施 1.3.1 可靠性 1.3.2 可维护性 1.4 现有HDFS HA解决方案 1.4.1 Hadoop的元数据备份方案 1.4.2 Hadoop的SecondaryNameNode方案 1.4.3 Hadoop的Checkpoint ode方案 1.4.4 Hadoop的BackupNode方案 1.4.5 DRDB方案 1.4.6 FaceBook的AvatarNode方案 1.5 方案优缺点比较 第2章 HDFS元数据解析 2.1 概述 2.2 内存元数据结构 2.2.1 INode 2.2.2 Block 2.2.3 BlockInfo和DatanodeDescriptor 2.2.4 小结 2.2.5 代码分析——元数据结构 2.3 磁盘元数据文件 2.4 Format情景分析 2.5 元数据应用场景分析 第3章 Hadoop的元数据备份方案 3.1 运行机制分析 4 3.1.1 NameNode启动加载元数据情景分析 3.1.2 元数据更新及日志写入情景分析 3.1.3 Checkpoint过程情景分析 3.1.4 元数据可靠性机制 3.1.5 元数据一致性机制 3.2 使用说明 第4章 Hadoop的Backup Node方案 4.1 Backup Node概述 4.1.1 系统架构 4.1.2 使用原则 4.1.3 优缺点 4.2 运行机制分析 4.2.1 启动流程 4.2.2 元数据操作情景分析 4.2.3 日志池(journal spool)机制 4.2.4 故障切换机制 4.3 实验方案说明 4.4 构建实验环境 4.4.1 网络拓扑 4.4.2 系统安装及配置 4.4.3 安装JDK 4.4.4 虚拟机集群架设 4.4.5 NameNode安装及配置 4.4.6 Backup Node安装及配置 4.4.7 Data Node安装及配置 4.4.8 Clients安装及配置 4.5 异常解决方案 4.5.1 异常情况分析 4.5.2 NameNode配置 4.5.3 Backup Node配置 4.5.4 Data Node配置 4.5.5 NameNode宕机切换实验 4.5.6 NameNode宕机读写测试 第5章 AvatarNode运行机制 5.1 方案说明 5.1.1 系统架构 5.1.2 思路分析 5.1.3 性能数据 5.2 元数据分析 5.2.1 类FSNamesystem 5.2.2 类FSDirectory 5.2.3 AvatarNode的磁盘元数据文件 5.3 AvatarNode Primary启动过程 5.4 AvatarNode Standby启动过程 5.4.1 AvatarNode的构造方法 5.4.2 Standby线程的run()方法 5.4.3 Ingest线程的run()方法 5.4.4 Ingest线程的ingestFSEdits ()方法 5.4.5 Standby线程的doCheckpoint()方法 5.5 用户操作情景分析 5.5.1 创建目录情景分析 5.5.2 创建文件情景分析 5.6 AvatarNode Standby故障切换过程 5.7 元数据一致性保证机制 5.7.1 元数据目录树信息 5.7.2 Data Node与Block数据块映射信息 5.8 Block更新同步问题 5.8.1 问题描述 5.8.2 结论 5.8.3 源码分析 第6章 AvatarNode使用 6.1 方案说明 6.1.1 网络拓扑 6.1.2 操作系统安装及配置 6.2 使用Avatar打补丁版本 6.2.1 Hadoop源码联机Build 6.2.2 Hadoop源码本地Build 6.2.3 NFS服务器构建 6.2.4 Avatar分发与部署 6.2.5 Primary(namenode0)节点配置 6.2.7 Data Node节点配置 6.2.8 Client节点配置 6.2.9 创建目录 6.2.10 挂载NFS 6.2.11 启动Ucarp 6.2.12 格式化 6.2.13 系统启动 6.2.14 检查 6.2.15 NameNode失效切换写文件实验 6.2.16 NameNode失效切换读文件实验 6.3 Avatar FaceBook版本的使用 6.3.1 Hadoop FaceBook版本安装 6.3.2 节点配置 6.3.3 启动HDFS 6.3.4 NameNode失效切换 第7章 AvatarNode异常解决方案 7.1 测试环境 7.2 Primary失效 7.2.1 解决方案 7.2.2 写操作实验步骤 7.2.3 改进写操作机制 7.2.4 读操作实验步骤 7.2.5 小结 7.3 Standby失效 7.4 NFS失效(数据未损坏) 7.4.1 解决方案 7.4.2 写操作实验步骤 7.4.3 读操作实验步骤 7.4.4 小结 322 7.5 NFS失效(数据已损坏) 7.5.1 解决方案 7.5.2 写操作实验步骤 7.5.3 读操作实验步骤 7.5.4 小结 7.6 Primary先失效,NFS后失效(数据未损坏) 7.6.1 解决方案 7.6.2 写操作实验步骤 7.6.3 读操作实验步骤 7.6.4 小结 7.7 Primary先失效(数据未损坏),NFS后失效(数据损坏) 7.7.1 解决方案 7.7.2 写操作实验步骤 7.7.3 读操作实验步骤 7.7.4 小结 7.8 NFS先失效(数据未损坏),Primary后失效 7.8.1 解决方案 7.8.2 写操作实验步骤 7.8.3 读操作实验步骤 7.8.4 小结 7.9 NFS先失效(数据损坏),Primary后失效(数据损坏) 7.9.1 解决方案 7.9.2 写操作实验步骤 7.9.3 读操作实验步骤 7.9.4 小结 7.10 实验结论 第8章 Cloudera HA NameNode使用 8.1 HA NameNode说明 8.2 CDH4B1版本HDFS集群配置 8.2.1 虚拟机安装 8.2.2 nn1配置 8.2.3 dn1~dn3配置 8.2.4 HDFS集群构建 8.3 HA NameNode配置 8.3.1 nn1配置 8.3.2 其他节点配置 8.4 HA NameNode使用 8.4.1 启动HA HDFS集群 8.4.2 第1次failover 8.4.3 模拟写操作 8.4.4 模拟Active Name Node失效,第2次failover 8.3.5 模拟新的Standby NameNode加入 8.5 小结

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值