python入门学习:9.文件和异常

关键点:文件、异常

9.1 从文件中读取数据9.2 写入文件9.3 异常9.4 存储数据

9.1 从文件中读取数据

9.1.1 读取整个文件
  首先创建一个pi_digits.txt文件,内容任意填写,保存在当前目录下。

1with open('pi_digits.txt') as file_object: #在当前目录下查找pi_digits.txt,同时返回一个文件对象
2    contents = file_object.read()
3    print(contents)
4
53.1415926535
6  8979323846
7  2643383279
8
9------------------

  第一句代码中关键字with,表示在不需要访问文件后将其自动关闭。通过情况下open()一个文件后,需要close()关闭它。这里使用with,在程序结束后自动关闭。
  open('pi_digits.txt')返回一个pi_digits.txt的对象,通过该对象可以操作read函数。
  可以看到打印结果有很多空格,因为read到末尾时返回一个空字符串,而将空字符串显示出来就是一个空行。要删除末尾空行,可在print语句中使用rstrip():

1with open('pi_digits.txt') as file_object: 
2    contents = file_object.read()
3    print(contents.rstrip())
4
53.1415926535
6  8979323846
7  2643383279
8------------------

9.1.2 文件路径
  当调用open()函数时,可以指定文件路径,默认在当前目录下查找。例如当前目录/text_files/filename.txt(相对路径)

1#linux or mac
2with open('text_files/filename.txt') as file_object:
3#windows 
4with open('text_files\filename.txt') as file_object:

  你还可以将文件在计算机中的准确位置告诉python,即全路径或者绝对文件路径

1#linux or OS
2file_path ='/home/book/Learn/python_work/chapter9/text_files/filename.txt'
3with open(file_path) as file_object:
4
5#windows
6file_path ='C:\Users\ywx\Learn\python_work\chapter9\text_files\filename.txt'
7with open(file_path) as file_object:

9.1.3 逐行读取
  读取文件时,常常需要检查其中的每一行,要以每次一行的方式检查文件,可对文件对象使用for循环:

1filename = 'pi_digits.txt'
2with open(filename) as file_object:
3    for line in file_object:
4        print(line.rstrip())

9.1.4 创建一个包含文件各行内容的列表
  使用关键字with,open()返回的文件对象只在with代码块内使用。如果要在with代码块外访问文件的内容,可在with代码块内将文件的各行存储在一个列表中,并在with代码块外使用列表:

1filename = 'pi_digits.txt'
2with open(filename) as file_object:
3    lines = file_object.readlines()   #读取多行存取到列表lines里
4
5for line in lines:
6    print(line.rstrip())

9.1.5 使用文件的内容
  将文件的内容读取后就可以使用文件的内容了。

 1filename = 'pi_digits.txt'
2with open(filename) as file_object:
3    lines = file_object.readlines()
4
5pi_string = ''
6for line in lines:
7    pi_string += line.rstrip()  #计算圆周率rstrip()删除末尾空格
8
9print(pi_string)
10print(len(pi_string))
11
123.1415926535  8979323846  2643383279
1336

  在变量pi_string存储的字符串中,包含原来位于左边的空格。为删除这些空格。可使用strip()而不是rstrip()

 1filename = 'pi_digits.txt'
2with open(filename) as file_object:
3    lines = file_object.readlines()
4
5pi_string = ''
6for line in lines:
7    pi_string += line.strip() #删除左边空格
8
9print(pi_string)
10print(len(pi_string))
11
123.141592653589793238462643383279
1332

  注意,读取文本文件时,python将其中的所有文本都解读为字符串。如果读取的是数字,并要将其作为数值使用,必须使用函数int()将其转化为整数,使用函数float转换为浮点数

9.2 写入文件

  保存数据的最简单方式之一是将其写入到文件中。
9.2.1 写入空文件
  要将文本写入文件,在调用open函数时需要提供另一个参数,告诉python你要写入打开的文件。

1filename = 'programming.txt'
2
3with open(filename,'w') as file_object:
4    file_object.write("I love programming")

  open第二个参数'w'(可写)。还可以指定'r'(可读)、'a'(附加)或者和可读可写('r+'),如果省略了实参,python默认只读打开。
  如果打开的文件不存在,open函数将自动创建它。然而在使用'w'(写)模式打开文件时应注意,如果打开的文件存在,python将在返回文件对象前情况文件。write表示写入文件
9.2.2 写入多行
  函数write不会在你写入的文件末尾添加换行,因此如果要写入多行,需要指定换行符。

1filename = 'programming.txt'
2
3with open(filename,'w') as file_object:
4    file_object.write("I love programming\n")
5    file_object.write("I love programming1\n")

9.2.3 附加到文件
  如果你要给文件添加内容,而不是覆盖原有内容,可以以附加模式打开。你以附加模式打开文件时,python不会在返回文件对象前清空文件,而是写入到文件的行都将添加到文件末尾。

1filename = 'programming.txt'
2
3with open(filename,'a') as file_object:
4    file_object.write("I also love finding meaning in large datasets.\n")
5    file_object.write("I love creating apps can run n a browser.\n")

9.3 异常

  python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当python不知所措发送错误时,它都会创建一个异常对象。
9.3.1 处理ZerodivisionError异常
  下面看一个错误,在Traceback中指出错误ZeroDivisionError是一个异常对象,python无法按照你的要求做时就会创建这种对象,表明0除法异常

1print(5/0)
2Traceback (most recent call last):
3  File "chapter9.py", line 51, in <module>
4    print(5/0)
5ZeroDivisionError: division by zero

9.3.2 使用try-except代码块
  当你认为可能发生了错误时,可编写一个try-except代码块来处理可能引发的异常。你让python尝试运行一些代码,并告诉它如果这些代码引发了指定的异常该怎么办。
  处理ZeroDivisionError异常的try-except代码块类似于下面这样:
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")

9.3.3 使else代码块
  通常将可能发生的错误代码放在try-except代码块中可提高这个程序抵御错误的能力,依赖于try代码块成功执行的代码都应放到else代码块中:

 1print("Give me two numbers ,and I'll divide them.")
2print("Enter 'q' to quit")
3
4while True:
5    first_number = input("\nFrist number:")
6    if frist_number == 'q':
7        break
8    second_number = input("\nSecond number:")
9    if second_number == 'q':
10        break
11try:
12    answer= int(frist_number )/int(second_number )
13except ZeroDivisionError:
14    print("You can't divide by zero!")
15else:
16    print(answer)

9.3.5 处理FileNotFoundError异常
  使用文件时,一种常见的问题是找不到文件:你要查找的文件可能在其他地方、文件名可能不正确或者这个文件根本不存在。对于所有这些情形,都可以使用try-except代码块以直观的方式进行处理。

1filename = 'alice.txt'
2with open(filename) as f_obj:
3    contens = f_obj.read()
4
5Traceback (most recent call last):
6  File "chapter9.py", line 58, in <module>
7    with open(filename) as f_obj:
8FileNotFoundError: [Errno 2] No such file or directory: 'alice.txt'

  最后一行报告了FileNotFoundError错误,表示python找不到指定文件,这个错误是调用open函数出现的,所以可以把open函数放在try代码块中:

1filename = 'alice.txt'
2try:
3    with open(filename) as f_obj:
4        contens = f_obj.read()
5except FileNotFoundError:
6    msg = "Sorry,the file "+ filename + " does not exist"

9.3.6 分析文本
  split()将字符串以空格符分割,并将结果存储到列表上。下面使用split分割字符串。

 1filename = 'alice.txt'
2try:
3    with open(filename) as f_obj:
4        contents = f_obj.read()
5except FileNotFoundError:
6    msg = "Sorry,the file "+ filename + " does not exist"
7    print(msg)
8else:
9    words = contents.split()
10    num_words = len(words)
11    print("The file " + filename + " has about " + str(num_words) + " words")
12
13The file alice.txt has about 29461 words

9.4 存储数据

** 使用json.dump()和json.load()**
  模块json让你能够将简单的python数据结构转储到文件中,并在程序再次运行时加载文件中的数据。

  • 使用json.dump存储数据
      json.dump()接受两个参数,要存储的数据以及可用于存储数据的文件对象。
1import json                      #导入json模块
2numbers = [2,3,5,7,11,13]
3filename = 'numbers,json'        #指定文件为.json格式
4with open(filename,'w') as f_obj:
5    json.dump(numbers,f_obj)      #将数据列表存储到文件中
  • 使用json.load加载数据
1import json
2filename = 'numbers,json'
3with open(filename) as f_obj:
4    numbers = json.load(f_obj)   #从json文件中读取列表
5print(numbers)
6
7[2, 3, 5, 7, 11, 13]

python入门学习:9.文件和异常的更多相关文章

  1. python入门学习:8.类

    python入门学习:8.类 关键点:类 8.1 创建和使用类8.2 使用类和实例8.3 继承8.4 导入类 8.1 创建和使用类   面向对象编程是最有效的软件编写方法之一.在面向对象编程中,你编写 ...

  2. python入门学习:7.函数

    python入门学习:7.函数 关键点:函数 7.1 定义函数7.2 传递实参7.3 返回值7.4 传递列表7.5 传递任意数量的实参7.6 将函数存储在模块中 7.1 定义函数   使用关键字def ...

  3. python入门学习:6.用户输入和while循环

    python入门学习:6.用户输入和while循环 关键点:输入.while循环 6.1 函数input()工作原理6.2 while循环简介6.3 使用while循环处理字典和列表 6.1 函数in ...

  4. python入门学习:5.字典

    python入门学习:5.字典 关键点:字典 5.1 使用字典5.2 遍历字典5.3 嵌套 5.1 使用字典   在python中字典是一系列键-值对.每个键都和一个值关联,你可以使用键来访问与之相关 ...

  5. python入门学习:4.if语句

    python入门学习:4.if语句 关键点:判断 4.1 一个简单的测试4.2 条件测试4.3 if语句 4.1 一个简单的测试   if语句基本格式如下,注意不要漏了冒号 1if 条件 :2     ...

  6. python入门学习:3.操作列表

    python入门学习:3.操作列表 关键点:列表 3.1 遍历整个列表3.2 创建数值列表3.3 使用列表3.4 元组 3.1 遍历整个列表   循环这种概念很重要,因为它是计算机自动完成重复工作的常 ...

  7. python入门学习:2.列表简介

    python入门学习:2.列表简介 关键点:列表 2.1 列表是什么2.2 修改.添加和删除元素2.3 组织列表 2.1 列表是什么   列表,是由一系列按特定顺序排列的元素组成.你可以创建包含字母表 ...

  8. Python入门学习:1.变量和简单的数据类型

    python入门学习:1.变量和简单的数据类型 关键点:变量.字符串.数字 1.1 变量的命名和使用1.2 字符串1.3 数字1.4 注释 1.1 变量的命名和使用   变量,顾名思义是一个可变的量, ...

  9. Python入门学习之路,怎么 “开心,高效,踏实” 地把Python学好?兴趣,兴趣,兴趣!

    Python入门学习之路,怎么 “开心,高效,踏实” 地把Python学好?兴趣,兴趣,兴趣!找到你自己感兴趣的点进行切入,并找到兴趣点进行自我驱动是最好的学习方式!       推荐两本书,一本作为 ...

随机推荐

  1. 大家好,又是新的一天。今天给大家带来一些新的知识:选择器的种类和css的三种样式

    今天我们为大家 选择了 六种 选择器: 1. 标签选择器 2.id选择器 3.class选择器 4.后代选择器 5.子代选择器 6.交集选择器 我们就举三个典型的例子:后代选择器,子代选择器和交集选择 ...

  2. Spring Data REST API集成Springfox、Swagger

    原文: Documenting a Spring Data REST API with Springfox and Swagger 使用Spring Date REST,你可以迅速为Spring Da ...

  3. 在CentOS下面安装hue时报的错

    说明:我的系统为CentOS 7 ,系统自带的python版本为2.7.5. 安装hue时,推荐使用2.7.0以上的版本,可以自己查看自己系统自带的版本 若是版本不对,要升级为2.7的版本,这里不再说 ...

  4. idea中查看方法参数;查看类、方法、属性注释

    Ctrl+P:查看方法参数Ctrl+Q:查看类.方法.属性注释

  5. 苹果手机如何投屏到win10电脑上

    苹果手机中的IOS系统比安卓系统的确好用.苹果手机使用多久都不会出现手机卡顿的现象,一如既往的流畅自如,这就是人们追求苹果机的原因之一.苹果手机朋友们可能会觉得手机屏幕太小影响视觉怎么办,苹果手机如何 ...

  6. 实战 | Android中文图混排时文图的居中对齐 FontMetrics以及自定义ImageSpan实现

    这个标题有点长,乍一看这么个标题你可能没明白啥意思,且听我慢慢道来. 公司的项目中新增了一个“心动” 的功能,用户初次使用时需要给一个引导页,就是下面图中的这个样子(这就是做完之后的效果了). 在上图 ...

  7. Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(上)

    前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有Java层的,也有jni层深入到Framework.Canvas有许多的知识内容,构建了一个武器库一般,所谓十 ...

  8. css3 @media支持ie8用respond.js 解决IE6~8的响应式布局问题

    respond.js插件实现原理 接下来,需要理解respond.js的实现思路: 第一步,将head中所有外部引入的CSS文件路径取出来存储到一个数组当中: 第二步,遍历数组,并一个个发送AJAX请 ...

  9. jQuery如何判断input元素是否获得焦点(点击编辑时)

    问题提出 如果你要判断input元素是否获得焦点,或者是否处在活动编辑状态,使用jQuery的 hasFocus() 方法或 is(':focus') 方法貌似都无效!搜索网上给出的办法,几乎净是采用 ...

  10. Windows 命令行

     1.d: 进入d盘  2.dir(directory)   显示当前文件夹下的所有内容  3.md (make directory) +文件夹名 在当前文件夹下创建文件夹  4.rd (remove ...