第十章:处理文件和异常

#学习处理文件,让程序能够快速地分析大量的数据
#学习错误处理,避免程序在面对意外情形时崩溃
#学习异常,是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. SDUT-3332&3333_数据结构实验之栈与队列五:下一较大值

    数据结构实验之栈与队列六:下一较大值 Time Limit: 150 ms Memory Limit: 8000 KiB Problem Description 对于包含n(1<=n<=1 ...

  2. top 9 Cloud Computing Failures

    top 9 Cloud Computing Failures Outages, hacks, bad weather, human error and other factors have led t ...

  3. pip、conda 换国内源,大大提高下载速度

    https://www.jianshu.com/p/b2d53904dd37 源就是下载地址了,换到国内的源下载速度真的快了近10倍,这里都用了清华的源 pip 只要新建一个配置文件,写上路径就行了 ...

  4. Python数据可视化matplotlib和seaborn

    Python在数据科学中的地位,不仅仅是因为numpy, scipy, pandas, scikit-learn这些高效易用.接口统一的科学计算包,其强大的数据可视化工具也是重要组成部分.在Pytho ...

  5. Java实现Windows锁屏

    public class LockWindows { public static void main(String [] args) throws Exception { Runtime.getRun ...

  6. jackson java转json hibernate懒加载造成的无限递归问题

    @JsonIgnore @JsonFilter @JsonBackReference @JsonManagedReference @JsonIgnoreProperties jackson中的@Jso ...

  7. C# 16 进制字符串转 int

    最近在写硬件,发现有一些测试是做 16 进制的字符串,需要把他转换为整形才可以处理. 本文告诉大家如何从 16 进制转整形 如果输入的是 0xaa 这时转换 int 不能使用 Parse 不然会出现异 ...

  8. H3C NAT的信息显示和调试

  9. java 创建线程方式

    1.继承Thread类 子类覆写父类中的run方法,将线程运行的代码存放在run中. 建立子类对象的同时线程也被创建. 通过调用start方法开启线程. 2.实现Runnable接口 子类覆盖接口中的 ...

  10. python模块之configparser模块

    configparser模块:用于按一定格式创建配置文件 创建 import configparser config = configparser.ConfigParser() config['DEF ...