zoukankan      html  css  js  c++  java
  • Python学习3月8号【python编程 从入门到实践】---》笔记(1)

    第十章:处理文件和异常


    #学习处理文件,让程序能够快速地分析大量的数据
    #学习错误处理,避免程序在面对意外情形时崩溃
    #学习异常,是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. ")
    file_object.write(" i love creating apps that can run in a browser. ")



    #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(" First number: ")
    if first_number=='q':
    break
    second_number=input(" Second 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()













































  • 相关阅读:
    关于编码问题
    期中架构之前所有的命令-总结
    Bootstrap表格添加搜索栏
    Bootstrap表格分页(二)
    Bootstrap表格分页(一)
    Entity Framework 分页处理
    Protocol Buffers v3.0.0编译安装小记
    golang学习笔记
    Java 对象生命周期
    Java 操作符
  • 原文地址:https://www.cnblogs.com/jackson669/p/10503895.html
Copyright © 2011-2022 走看看