zoukankan      html  css  js  c++  java
  • 萌新向Python数据分析及数据挖掘 第一章 Python基础 第十节 文件和异常

    第一章 Python基础

    第十节 文件和异常

    从文件中读取数据

    读取文件、文件路径

    
    
    
    
     
    1 filename = 'pi_digits.txt' #文件名取个代号
    2 #读取整个文件    
    3 with open(filename) as file_object:
    4     contents = file_object.read()# 给内容取个代号
    5     print(contents.rstrip())
    6 #逐行读取
    7 with open(filename) as file_object:
    8     for line in file_object:#给一行内容取个代号
    9         print(line.rstrip())
    View Code
    
    

    函数open():接受要打开文件的文件名作为参数。如果没有指定路径,则在当前执行的文件所在的目录中查找指定的文件。此函数返回一个表示文件的对象。

    关键字with:表示在不需要访问文件之后将其关闭。

    函数read():用于从文件读取指定的字节数,如果未给定或为负则读取所有。到达文件末尾时返回一个空字符串(空行)。打印时可使用函数rstrip()删掉。

    相对文件路径:相对于当前运行的程序所在目录。

    绝对文件路径:完整的文件路径。

    创建包含文件各行内容的列表并使用

    使用关键字with时,open()返回的文件对象只在with代码块内使用。如果要在with代码块外访问文件内容,可在里边将文件各行存储在一个列表中待后续使用。

     1 filename = 'pi_digits.txt'
     2 with open(filename) as file_object:
     3     lines = file_object.readlines()#读完文件
     4 
     5 pi_string = '' #
     6 for line in lines:
     7     pi_string += line.strip()#把每个line的内容去掉空格加入Pi——string
     8 
     9 print(pi_string #打印
    10 print(len(pi_string))#量一下你有多长
    View Code
    
    

    注意:读取文本文件时,python将其中所有文本都解读稳字符串。

    写入文件

    将文本写入文件时,调用open()时需要提供另外一个实参。其中,第一个实参时要打开的文件的名称。第二个实参是指定的模式:读取模式('r')、写入模式('w')、附加模式('a')、读取和写入模式('r+'。如果省略将以默认的只读模式打开文件。

    如果写入的文件不存在,则open()会自动创建它。如果以写入模式打开文件且指定文件对象存在,则返回文件对象前会清空改文件。

    
    
    运行结果:
    1 filename = 'programming.txt'
    2 with open(filename, 'w') as file_object:
    3     file_object.write("I love programming.")
    4     file_object.write("I love programming.
    ")#注意换行符
    
    5     file_object.write("I love creating new games.
    ")
    View Code
    
    

    注意:python只能将字符串写入文本文件。函数write()不会在写入的文本末尾添加换行符。

    附加到文件

     
    运行结果:
    1 filename = 'programming.txt'
    2 with open(filename, 'a') as file_object:#‘a’ 代表附加模式,在末尾添加内容
    3     file_object.write("I also love finding meaning in large datasets.
    ")
    4     file_object.write("I love creating apps that can run in a browser.
    ")
    View Code
    
    

    异常

    异常时python用来管理程序执行期间发生错误的特殊对象。

    异常是使用try-except代码块处理的。如果try代码块中的代码运行无误,则跳过except代码块;如果try代码块中的代码运行出现错误,则运行except代码块

    
    

    ZeroDivisionError是一个异常对象。

    1 try:#试试
    2     print(5/0) #打印5除以0
    3 except ZeroDivisionError: #要是爆发“除以0错误”
    4     print("You can't divide by zero!")#打印你不能除以0
    View Code
    
    

    使用try-except代码块也可以隐藏Traceback,防止恶意攻击等等。

    除了try-except代码块还有try-except-else代码块。其中try代码块只包含可能导致错误的代码,而依赖于其成功执行的代码都放在else代码块中。

    如果希望发生错误时继续运行,可以在except代码块中使用pass语句pass语句还充当了占位符,用来提醒我们在程序的某个地方什么都没有做。

    常见的异常类型如下:

    AttributeError:属性错误,特性引用和赋值失败时会引发属性错误

    NameError:试图访问的变量名不存在

    SyntaxError:语法错误,代码形式错误

    Exception:所有异常的基类,因为所有python异常类都是基类Exception的其中一员,异常都是从基类Exception继承的,并且都在exceptions python 模块中定义。

    IOError:python ioerror,一般常见于打开不存在文件时会引发IOError错误,也可以解理为输出输入错误

    KeyError:使用了映射中不存在的关键字(键)时引发的关键字错误

    IndexError:索引错误,使用的索引不存在,常索引超出序列范围

    TypeError:类型错误,内建操作或是函数应于在了错误类型的对象时会引发类型错误

    ZeroDivisonError:除数为0,在用除法操作时,第二个参数为0时引发了该错误

    ValueError:值错误,传给对象的参数类型不正确,像是给int()函数传入了字符串数据类型的参数。

    更多内容可以看看怪伽先森小哥哥的文:

    https://blog.csdn.net/u011033906/article/details/79653345

    存储数据

    模块json可以让我们将简单的python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。并且还可以使用json在python程序中分享数据。

    函数json.dump()接受两个实参:要存储的数据以及可用于存储数据的文件对象。

     1 import json #让json来帮忙
     2 numbers = [2, 3, 5, 7, 11, 13]
     3 filename = 'numbers.json'
     4 
     5 with open(filename, 'w') as f_obj:
     6 #函数json.dump()接受两个实参:要存储的数据以及可用于存储数据的文件对象。
     7     json.dump(numbers, f_obj)
     8 
     9 #读取整个文件    
    10 with open(filename) as file_object:
    11     contents = file_object.read()# 给内容取个代号
    12     print(contents.rstrip())
    13     
    14 with open(filename) as f_obj:#也可以用json.load来打开,毕竟是json自己写的东西,他当然有办法打开
    15     numbers = json.load(f_obj)
    16 print(numbers)
    View Code
    
    

     

    下面将存取数据和异常结合一下程序运行时,从文件获取用户名,若文件不存在,则提示输入用户名并存储:




     1 import json
     2 # 如果以前存储了用户名就加载它
     3 # 否则提示用户输入用户名并存储它
     4 filename = 'username.json'
     5 ask = ''
     6 while ask != "no":
     7     try:#试试打开username
     8         with open(filename) as f_obj:
     9             username = json.load(f_obj)
    10     except FileNotFoundError: #如果发生“找不到文件”错误
    11         username = input("What is your name? ")#让用户自己输入自己的名字
    12         with open(filename, 'w') as f_obj:#打开一个以用户的名字的文件,要是没有就创建一个
    13             json.dump(username, f_obj)#用json家的dump写文件
    14             print("We'll remember you when you come back, " + username + "!")
    15             #打印告诉用户我会记住你的
    16             ask = input("Next one?yes/no ")
    17     else:
    18         print("Welcome back, " + username + "!")#要不就打印欢迎回来,某某某!
    19         ask = input("Next one?yes/no ")        
    View Code
  • 相关阅读:
    js 高阶函数之柯里化
    JavaScript 相关的工具代码
    JS 数组、对象的深拷贝
    页面性能优化
    axios(封装使用、拦截特定请求、判断所有请求加载完毕)
    java 实现登录验证码 (kaptcha 验证码组件)
    告别 hash 路由,迎接 history 路由
    解决 Vue 动态生成 el-checkbox 点击无法赋值问题
    分享基于 websocket 网页端聊天室
    vue + element 动态渲染、移除表单并添加验证
  • 原文地址:https://www.cnblogs.com/romannista/p/10336510.html
Copyright © 2011-2022 走看看