第十章:处理文件和异常

#学习处理文件,让程序能够快速地分析大量的数据
#学习错误处理,避免程序在面对意外情形时崩溃
#学习异常,是python创建的特殊对象,用于管理程序运行时出现
#学习模块json,它让你能够保存用户数据,以免在程序停止运行后丢失
10.1 从文件中读取数据

#10.1.1 读取整个文件

#10.1.3 逐行读取
##调用For循环
# filename= 'pi_digits.txt'
# with open (filename) as file_object:#使用了关键字with,让python负责妥善地打开和关闭文件。
# for line in file_object:#为查看文件的内容,我们通过对文件对象执行循环来遍历文件中的每一行
# print(line.rstrip())
#10.1.4 创建一个包含文件各行内容的列表
# filename = 'pi_digits.txt'
# with open(filename) as file_object:
# lines = file_object.readlines()
# for line in lines:
# print(line.rstrip())


#10.2.1写入空文件
 
filename = 'programming.txt'

with open (filename,"w") as file_object:
file_object.write(" I love programming.") #10.2.3附加到文件 #以‘a'的附加模式打开,写入到文件的行都将添加到文件末尾
filename = 'programming.txt'

with open (filename,"a") as file_object:
file_object.write(" also love finding meaning in large datasets.\n")
file_object.write(" i love creating apps that can run in a browser.\n")


#10.3 异常

#10.3.1 处理ZeroDivisionError异常

# try:
# print(5/0)
# except ZeroDivisionError:
# print(" You can't divide by zero ")

10.3.3 使用异常避免崩溃
#try-except-else代码块的工作原理大致如下:

#处理FileNotFoundError 异常

#可以使用try-except 代码块以直观的方式进行处理。

filename= 'alice.txt'
try:
with open(filename) as f_obj:## 会由几率发生异常的运行
contens = f_obj.read()##将read()得到的内容放进contens里面
except FileNotFoundError:#如果发生FileNotFoundError异常就执行一下行代码
msg="Sorry , the file " + filename + " does not exist."
print(msg)##输出一个提醒代码

10.3.4 else代码块
#try-except-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("\nSecond number: ")
try: ###### try-except-else代码块的工作原理,python尝试执行try代码块中的代码;
        answer = int(first_number) / int(second_number)###有可能发生异常的一行代码
except ZeroDivisionError:            #except代码块告诉python,出现ZeroDivisionError异常时该怎么办,下一行就是异常后执行的代码块。
        print("You can't divide by 0!")
else:                       ####只有可能引发异常的代码才需要放在try语句中;有一些仅在try代码块成功执行时才需要运行的代码,并且放在else语句里面
        print(answer)
10.3.6分析文本

#以空格为分隔符将字符串将字符串分拆成多个部分,并将这些部分都存储到一个列表中
# title = "Alice in Wonderland "
# a=title.split()#它时根据一个字符串创建一个单词列表。
# print(a) 10.3.7 使用多个文件
def count_words(filename):
"计算一个文件大致有多少个单词"
try:
with open (filname) as f_obj:
contents= f_obj.read()
except FileExistsError: # 如果想在失败时候一声不吭,可以在except代码块中明确什么都不做,可以写入pass代码
msg="Sorry , the file" + filename + " does not exist."
print(msg)
else:
#计算文件大致包含多少个单词
words= contents.split()#尝试计算它包含多少个单词,原理:根据一个字符串创建一个单词列表。
num_words = len(words)
print("The file " + filename + "has about" + str(num_words) + "words") filename = ['alice.text','siddhartha.txt','moby_dick.txt']
for filename in filenames:
  count_words(filename)
在以上代码可知,使用try-except代码块提供了两个重要的优点:避免让用户看到traceback;让程序能够分析能够找到的其他文件。

10.4存储数据

#模块json让你能够将简单的python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。
#json 格式最初是为(JavaScriptObject Notation) 格式最初是为Javascript开发。
 
 
import json
numbers=[2,3,4,56,15] filename = 'number.json' ##使用文件扩展名。json来指出文件存储的数据为JSON格式。
with open(filename,'w')as f_obj:
json.dump(numbers,f_obj)      ##函数json.dump()接受两个实参:要存储的数据以及可用于存储数据的文件对象。
print(numbers)

两个使用了两个不同函数,一个是load一个dump 。
import json
filename = 'number.json'
with open(filename) as f_obj:
numbers=json.load(f_obj)      ##我们使用函数json.load()加载存储在numbers.json中的信息,并将其存储到变量numbers中。 print(numbers)
 
import json

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 greet_user():
#问候用户,并指出其名字
username= get_stored_username()
if username:
print("Welcome back," + username + "!")
else:
username = input("What is your name ?")
filename ='username.json'
with open(filename,'w')as f_obj:
json.dump(username,f_obj)
print("We'll remember you when you come back," + username + "!") greet_user()


10.4.3重构

这个是remember_me.py的这个最终版本中,每个函数都执行单一而清晰的任务。我们调用greet_user(),他打印一条合适的消息

###要么欢迎老用户回来,要么问候新用户

首先 调用 get_stored_username() ,这个函数只负责获取存储的用户名(如果存储了的话),再在必要时调用get_stored-username(),这个函数只负责获取并存储新用户的用户名。

这种划分必不可少!!!!
import json

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():
#提示用户输入用户名
uesrname1=input("What is your name?")
filename='username1.json'
with open(filename,'w')as f_obj:
json.dump(username,f_obj)
return username def greet_user():
#问候用户,并指出其名字
username= get_stored_username()
if username:
print("Welcome back," + username + "!")
else:
username=get_new_username()
print("We'll remember you when you come back," + username + "!") greet_user()


Python学习3月8号【python编程 从入门到实践】---》笔记(1)的更多相关文章

  1. Python编程从入门到实践笔记——异常和存储数据

    Python编程从入门到实践笔记——异常和存储数据 #coding=gbk #Python编程从入门到实践笔记——异常和存储数据 #10.3异常 #Python使用被称为异常的特殊对象来管理程序执行期 ...

  2. Python编程从入门到实践笔记——文件

    Python编程从入门到实践笔记——文件 #coding=gbk #Python编程从入门到实践笔记——文件 #10.1从文件中读取数据 #1.读取整个文件 file_name = 'pi_digit ...

  3. Python编程从入门到实践笔记——类

    Python编程从入门到实践笔记——类 #coding=gbk #Python编程从入门到实践笔记——类 #9.1创建和使用类 #1.创建Dog类 class Dog():#类名首字母大写 " ...

  4. Python编程从入门到实践笔记——函数

    Python编程从入门到实践笔记——函数 #coding=gbk #Python编程从入门到实践笔记——函数 #8.1定义函数 def 函数名(形参): # [缩进]注释+函数体 #1.向函数传递信息 ...

  5. Python编程从入门到实践笔记——用户输入和while循环

    Python编程从入门到实践笔记——用户输入和while循环 #coding=utf-8 #函数input()让程序暂停运行,等待用户输入一些文本.得到用户的输入以后将其存储在一个变量中,方便后续使用 ...

  6. Python编程从入门到实践笔记——字典

    Python编程从入门到实践笔记——字典 #coding=utf-8 #字典--放在{}中的键值对:跟json很像 #键和值之间用:分隔:键值对之间用,分隔 alien_0 = {'color':'g ...

  7. Python编程从入门到实践笔记——if语句

    Python编程从入门到实践笔记——if语句 #coding=utf-8 cars=['bwm','audi','toyota','subaru','maserati'] bicycles = [&q ...

  8. Python编程从入门到实践笔记——操作列表

    Python编程从入门到实践笔记——操作列表 #coding=utf-8 magicians = ['alice','david','carolina'] #遍历整个列表 for magician i ...

  9. Python编程从入门到实践笔记——列表简介

    Python编程从入门到实践笔记——列表简介 #coding=utf-8 #列表——我的理解等于C语言和Java中的数组 bicycles = ["trek","cann ...

  10. Python编程从入门到实践笔记——变量和简单数据类型

    Python编程从入门到实践笔记——变量和简单数据类型 #coding=gbk #变量 message_1 = 'aAa fff' message_2 = 'hart' message_3 = &qu ...

随机推荐

  1. 什么是实例化? 标签: vb 2015-02-08 20:26 1026人阅读 评论(30) 收藏

    为什么要写这个博客呢?可能是因为自己的基础太差,昨天敲三层的注册,各层都敲完了以后,死活报错,无奈之下只能找晓婵求救,她只改了三个地方,犯了同一个错误,我的源码是这样写的:Dim uA As  Ent ...

  2. 坚守安全第一准则!阿里云接连通过等保2.0测评、ISO国际认证

    斩获新资质 数字时代,数据的安全对于互联网用户来说显得尤为重要.阿里云更是一直坚持“安全第一准则”,致力于为客户的数据安全搭建更健全机制. 2019年5月,阿里云“电子政务云平台系统”正式通过网络安全 ...

  3. Linux 用户he用户组管理

    8)系统中有一类用户称为伪用户(psuedo users). 这些用户在/etc/passwd  文件中也占有一条记录,但是不能登陆,因为他们的登陆shell 为空,他们的存在主要是方便系统管理,满足 ...

  4. 模板—插头dp(Ural 1519 Formula 1)

    括号表示法: 据说比下一个要快而且灵活. #include<iostream> #include<cstring> #include<cstdio> #define ...

  5. @noi.ac - 171@ 立方体

    目录 @description@ @solution@ @accepted code@ @details@ @description@ TonyFang 打算送你一些立方体. 你需要在 [1, n] ...

  6. oracle多个平等的索引

    当SQL语句的执行路径可以使用分布在多个表上的多个索引时, ORACLE会同时使用多个索引并在运行时对它们的记录进行合并, 检索出仅对全部索引有效的记录. 在ORACLE选择执行路径时,唯一性索引的等 ...

  7. settTimeout vs setInterval

    setTimeout:过一段固定的时间后,将代码提交到代码队列中排队. setInterval:每隔一段固定的时间,执行一次代码. 他们两都接受两个参数,第一个参数是字符串或者函数,第二个参数是设定的 ...

  8. zoj 2338 The Towers of Hanoi Revisited

    The Towers of Hanoi Revisited Time Limit: 5 Seconds Memory Limit: 32768 KB Special Judge You all mus ...

  9. CentOS 安装 semanage 命令

    CentOS 安装 semanage 命令 在服务器上运行: [root@ca1 ~]# yum install policycoreutils-python vim /etc/selinux/con ...

  10. 如何将为Android开发的AIR应用转移到SD卡

    如果你想用户能够将为Android开发的AIR应用转移到SD卡上,所需要做的是在你的应用程序描述符中修改一下.如果你想你的应用程序默认安装到内置存储器中,但是允许用户把它转移到SD卡上,设置andro ...