Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 638|回复: 0

Python(6)-文件和异常

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-17 11:23:05 | 显示全部楼层 |阅读模式
    1.从文件中读取数据
    1.1读取整个文件
    举例文档file.txt内容如下:
    3.1415926535
      8979323846
      2643383279
    读取文件:
    with open('file.txt') as file_object:
        contents = file_object.read()
        print(contents.rstrip())  删除末尾的空行
    输出结果:
    3.1415926535
      8979323846
      2643383279
    函数open() 返回一个表示文件的对象。再用方法read()读取这个文件的全部内容,并作为字符串存储在变量contents中。
     
    1.2文件路径
    假设文件存在Python工作目录,text_files中,可用相对路径(相对于当前运行的程序所在目录)。
    file_path = ’text_files/file.txt’  注意根据系统,区别用反斜杠还是斜杠
    with open(file_path) as file_object:
     
    1.3逐行读取
    filename = ‘file.txt'
    with open(filename) as file_object:
        for line in file_object:
            print(line.rstrip())
     
    1.4创建一个包含文件各行内容的列表
    filename = ‘file.txt'
    with open(filename) as file_object:
        lines = file_object.readlines()  用方法readlines()从文件中读取每一行,并将其存储在一个列表中;
    for line in lines:   for循环打印lines中的各行;
        print(line.rstrip())
     
    2.写入文件
    2.1写入空文件
    举例如下:
    filename = ‘file.txt'
    with open(filename, 'w') as file_object:  读取模式(‘r’)、写入模式(‘w’)、附加模式(‘a’)、读取和写入模式(‘r+’),不传参则是只读模式;
        file_object.write(“I like to learn.”)  方法write()将一个字符串写入文件;
    注意:Python只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数str()将其转换为字符串格式。
     
    2.2写入多行
    函数write()不会在你写入的文本末尾添加换行符,因此如果写入多行时没有指定换行符,文件看起来可能不是希望的那样。
    filename = 'like.txt'
    with open(filename, 'w') as file_object:
        file_object.write(" I like to learn.\n”)
        file_object.write("I like English.\n”)   需要加换行符,文件才会换行显示;
     
    2.3附加到文件
    filename = 'like.txt'
    with open(filename, 'a') as file_object:  用附加模式’a’;
        file_object.write("I also like ...\n”)  会添加在之前文件后面;
     
    3.异常
    Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果程序里编写了处理该异常的代码,程序将被继续运行;如果程序里未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。
    异常是使用try-except代码块处理的。try-except代码块让Python执行指定的操作,同时告诉Python发生异常是怎么办。使用了try-except代码块时,即便出现异常,程序也将继续运行:显示编写的友好的错误消息。
     
    3.1处理ZeroDivisionError异常
    print(5/0)  数字除以0异常;
    traceback如下:
    Traceback (most recent call last):
        File "file.py", line 1, in <module>
            print(5/0)
    ZeroDivisionError: division by zero
     
    3.2使用try-except代码块
    try:
        print(5/0)
    except ZeroDivisionError:
        print("You can't divide by zero!”)
    如果try代码块中的代码运行起来没问题,Python将跳过except代码块;如果try代码中的代码导致了错误,Python将查找这样的except代码块,并运行其中的代码,即其中指定的错误与引发的错误相同。
     
    3.3处理FileNotFoundError异常
    使用文件时,一种常见问题是找不到文件:你要查找的文件可能在其他地方、文件名可能不正确或者这个文件根本就不存在。
    如下,是读取同一个不存在文件的异常处理:
    filename = 'alice.txt'
    try:
        with open(filename) as f_obj:
            contents = f_obj.read()
    except FileNotFoundError:
        msg = "Sorry, the file " + filename + " does not exist.”
        print(msg)
     
    3.4分析文本
    >>> title = "Alice in Wonderland”
    >>> title.split()
    ['Alice', 'in', 'Wonderland']
    方法split()已空格为分隔符将字符串拆分成多个部分,并将这些部分都存储到一个列表中。
    如下,可以获取文件的总字符有多少个:
    filename = ‘alice.txt’
    try:
        with open(filename) as f_obj:
            contents = f_obj.read()
    except FileNotFoundError:
        msg = "Sorry, the file " + filename + " does not exist.”
        print(msg)
    else:
    # 计算文件大致包含多少个单词
    words = contents.split()  调用split()方法,生成一个列表包含这个文件中的所有单词;
    num_words = len(words)    len()来确定列表的长度,从而获得文件的单词数;
    print("The file " + filename + " has about " + str(num_words) + " words.") 
    依赖于try 代码块成功执行的代码,都会放到else 代码块中再使用。
     
    4.存储数据
    用户关闭程序时,总是要保存他们提供的一些信息,一种简单的方式是使用模块json来存储数据。
    模块json让你能够将简单的Python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。
     
    4.1使用json.dump()和json.load()
    (1)json.dump()存储数字列表
    import json
     
    numbers = [2, 3, 5, 7, 11, 13]
    filename = ‘numbers.json’   指定了要将该数字列表存储到其中的文件的名称;
    with open(filename, 'w') as f_obj:    写入模式打开文件,将数据写入;
        json.dump(numbers, f_obj)     使用函数json.dump()将数字列表存储到文件中;
    打开numbers.json文件,数据的存储格式与Python的一样([2, 3, 5, 7, 11, 13]).
     
    (2)用json.load()将这个列表读取到内存中
    import json
     
    filename = ‘numbers.json'
    with open(filename) as f_obj:    用读取方式打开文件;
        numbers = json.load(f_obj)   使用函数json.load()加载存储在文件中的信息,并将其存储到变量numbers中;
    print(numbers)      输出数据:[2, 3, 5, 7, 11, 13]
     
    4.2保存和读取用户生成的数据
    程序启用时,获取用户名:
    import json
    # 如果以前存储了用户名,就加载它
    # 否则,就提示用户输入用户名并存储它
    filename = ‘username.json'
    try:
        with open(filename) as f_obj:    尝试打开文件username.json;
            username = json.load(f_obj)    文件存在,将用户名读取到内存中,再执行else代码块;
    except FileNotFoundError:    用户首次运行这个程序时,文件username.json不存在,将引发FileNotFoundError异常,将执行except代码块;
        username = input("What is your name? “)    提示输入用户名;
        with open(filename, 'w') as f_obj:    使用json.dump()存储该用户名;
            json.dump(username, f_obj)
            print("We'll remember you when you come back, " + username + "!”)
    else:
        print("Welcome back, " + username + "!”)
     
    4.3重构
    代码能够正确地运行,但可以做进一步的改进-将代码划分为一系列完成具体工作的函数,这样的过程称为重构。重构让代码更清晰、更易于理解、更容易扩展。
    将上述例子重构:
    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():
        """提示用户输入用户名"""
        username = input("What is 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:
            print("Welcome back, " + username + "!”)
        else:
            username = get_new_username()
            print("We'll remember you when you come back, " + username + "!")
     
    greet_user()
    每个函数都执行单一而清晰的任务。调用greet_user(),通过调用前面的两个方法,实现要么欢迎老用户回来,要么问候新用户。首先调用get_stored_username(),这个函数只负责获取存储的用户名(如果存储了的话),再在必要时调用get_new_usernane(),这个函数只负责获取并存储新用户的用户名。
     
     
     
     
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 16:53 , Processed in 0.062922 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表