9.1 从文件中读取数据

  要使用文本文件中的信息,首先需要将信息读取到内存中。为此,你可以一次性读取文件的全部内容,也可以以每次一行的方式逐步读取。

9.1.1 读取整个文件

with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents)

  函数open()接受一个参数:要打开的文件的名称或者路径。它返回一个表示文件的对象。

  关键字with在不再需要访问文件后将其关闭。你也可以调用open()和close()来打开和关闭文件。

  相比于原始文件,该输出唯一不同的地方是末尾多了一个空行。为何会多出这个空行呢?因为read()到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一个空行。删除空行,可在print语句中使用rstrip()

 print(contents.rstrip())

  

  路径在 Linux 和 Windows 下并不相同。在Linux和OS X中,你可以这样编写代码:

with open('text_files/filename.txt') as file_object:

  在Windows系统中,在文件路径中使用反斜杠(\)而不是斜杠(/):

with open('text_files\filename.txt') as file_object: 

  相对路径:由于文件夹text_files位于文件夹python_work中,因此可使用相对文件路径来打开该文件夹中的文件。相对文件路径让Python到指定的位置去查找,而该位置是相对于当前运行的程序所在目录的。

  绝对路径:我们还可以将文件在计算机中的准确位置告诉Python,这样就不用关心当前运行的程序存储在什么地方了。

9.1.2 逐行读取

  读取文件时,常常需要检查其中的每一行:你可能要在文件中查找特定的信息,或者要以某种方式修改文件中的文本。

file_path = 'C:\\Users\\sunzhicheng1\\PycharmProjects\\pythonProject1\\pi_digits.txt'
with open(file_path) as file_object:
for line in file_object:
print(line) """
3.1415926535 8979323846 2643383279
"""

  结果发现空白行变多了,这是因为在这个文件中,每行的末尾都有一个看不见的换行符,而print语句也会加上一个换行符,因此每行末尾都有两个换行符:一个来自文件,另一个来自print语句。要消除这些多余的空白行,可在print语句中使用 rstrip()

print(line.rstrip())

9.1.3 创建一个包含文件各行内容的列表

  readlines() 从文件中读取每一行,并将其存储在一个列表中。

filename = 'pi_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines() for line in lines:
print(line.rstrip())

9.2 写入文件

  调用open()时提供了两个实参。第一个实参也是要打开的文件的名称,第二个实参表示以怎样的方式打开这个文件。打开文件时,可指定读取模
式('r')、写入模式('w')、附加模式('a')或让你能够读取和写入文件的模式('r+')。如果省略,则为只读模式打开。

  如果你要写入的文件不存在,函数open()将自动创建它。以写入('w')模式打开文件时千万要小心,因为如果指定的文件已经存在,Python将在返回文件对象前清空该文件

  函数 write() 不会在你写入的文本末尾添加换行符,因此如果我们没有自己写入\n,就会导致内容写入到一行上。

  注意:Python只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数 str() 将数值数据转换为字符串格式

filename = 'programming.txt'
with open(filename, 'w') as file_object:
file_object.write("I love programming.\n")
file_object.write("I love creating new games.\n")

9.2.1 附加到文件

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

filename = 'programming.txt' 

with open(filename, 'a') as file_object:
file_object.write("I also love finding meaning in large datasets.\n")
file_object.write("I love creating apps that can run in a browser.\n")

  


9.3 异常

  每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。

  异常是使用try-except代码块处理的。

9.3.1 使用 try-except 代码块

  这里使用 ZeroDivisionError 异常作为例子,这个异常是指不能将将一个数除以0。

  程序自动处理异常时显示的traceback:

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

  使用 try-except 代码块处理 ZeroDivisionError 异常:

try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")

9.3.2 else 代码块

  通过将可能引发错误的代码放在try-except代码块中,可提高这个程序抵御错误的能力。这个示例还包含一个else代码块;依赖于try代码块成功执行的代码都应放到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("Second number: ") try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
print("You can't divide by 0!")
else:
print(answer)

9.4 存储数据

  模块 json 让你能够将简单的 Python 数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。

9.4.1 使用 json.dump()和 json.load()

  将使用 json.dump() 来存储这组数字,而将使用 json.load() 来读取数字。

  写入 json 文件内容:

import json
numbers = [2, 3, 5, 7, 11, 13] # 写入 json 文件
filename = 'numbers.json'
with open(filename, 'w') as f_obj:
json.dump(numbers, f_obj)

  json 文件内容:

[2, 3, 5, 7, 11, 13]

  读取 json 文件内容:

# 读取 json 文件内容
import json
filename = 'numbers.json'
with open(filename) as f_obj:
numbers = json.load(f_obj) print(numbers)

9.文件和异常--《Python编程:从入门到实践》的更多相关文章

  1. Python编程从入门到实践笔记——文件

    Python编程从入门到实践笔记——文件 #coding=gbk #Python编程从入门到实践笔记——文件 #10.1从文件中读取数据 #1.读取整个文件 file_name = 'pi_digit ...

  2. 《Python编程从入门到实践》_第十章_文件和异常

    读取整个文件 文件pi_digits.txt #文件pi_digits.txt 3.1415926535 8979323846 2643383279 下面的程序打开并读取整个文件,再将其内容显示到屏幕 ...

  3. Python编程从入门到实践笔记——异常和存储数据

    Python编程从入门到实践笔记——异常和存储数据 #coding=gbk #Python编程从入门到实践笔记——异常和存储数据 #10.3异常 #Python使用被称为异常的特殊对象来管理程序执行期 ...

  4. Python编程从入门到实践

    Python编程从入门到实践1 起步2 变量和简单数据类型3 列表简介4 操作列表5 if语句6 字典7 用户输入和while循环8 函数9 类10 文件和异常11 测试代码12 武装飞船13 外星人 ...

  5. 《Python编程:从入门到实践》分享下载

    书籍信息 书名:<Python编程:从入门到实践> 原作名:Python Crash Course 作者: [美] 埃里克·马瑟斯 豆瓣评分:9.1分(2534人评价) 内容简介 本书是一 ...

  6. 《python编程从入门到实践》读书实践笔记(一)

    本文是<python编程从入门到实践>读书实践笔记1~10章的内容,主要包含安装.基础类型.函数.类.文件读写及异常的内容. 1 起步 1.1 搭建环境 1.1.1 Python 版本选择 ...

  7. Python编程从入门到实践笔记——类

    Python编程从入门到实践笔记——类 #coding=gbk #Python编程从入门到实践笔记——类 #9.1创建和使用类 #1.创建Dog类 class Dog():#类名首字母大写 " ...

  8. Python编程从入门到实践笔记——函数

    Python编程从入门到实践笔记——函数 #coding=gbk #Python编程从入门到实践笔记——函数 #8.1定义函数 def 函数名(形参): # [缩进]注释+函数体 #1.向函数传递信息 ...

  9. 《python编程从入门到实践》读书实践笔记(二)

    本文是<python编程从入门到实践>读书实践笔记11章的内容,主要包含测试,为体现测试的重要性,独立成文. 11 测试代码 写在前面的话,以下是我这些年开发中和测试相关的血泪史. 对于一 ...

  10. 初学《python编程从入门到实践》web应用程序,出现错误

    一开始是遇到了TemplateDoesNotExist的错误,上百度都是说改settings.py里面的TEMPLATE的DIRS, 但我改了还是出现问题, 我用的<python编程从入门到实践 ...

随机推荐

  1. S3C2440移植uboot之支持NAND启动

      上一节S3C2440移植uboot之新建单板_时钟_SDRAM_串口移植uboot初始化了时钟,配置了支持串口,这一节我们继续修改uboot支持NAND启动. 目录 1.去掉 "-pie ...

  2. Webpack Vue瘦身,感受快到飞起的加载速度!

    症结 在利用webpack脚手架搭建vue项目后,往往最终打包的.js和.css文件过于庞大,造成首次加载的时候白屏时间过长,影响用户体验,下图为未经任何优化直接npm run build之后的情况: ...

  3. sql server主从同步

    sql server主从方案介绍   sql server 作为目前主流的数据库,用户遍布世界各地.sql server也有一些比较成熟的主备方案,目前主要有:复制模式(发布-订阅模式).镜像传输模式 ...

  4. 解决JedisNoReachableClusterNodeException,No reachable node in cluster报错

    通过jedis连接redis集群时报如下的错误:JedisNoReachableClusterNodeException,No reachable node in cluster 本机连接均正常:   ...

  5. 【Git】Git与Repo入门

    [来源]https://www.cnblogs.com/angeldevil/archive/2013/11/26/3238470.html

  6. Go-插入排序

    // InsertSort 插入排序 // 思路: // 1. 第一个元素默认是已经排好序的 // 2. 从第二个元素开始,依次比较前面一个元素中,如果小于则交换位置 // 插入排序思路: 将一个元素 ...

  7. [转帖]haproxy

    HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性.负载均衡,以及基于TCP和HTTP的应用程序代理. HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保 ...

  8. [转帖]win10下使用Rclone将OneDrive映射到本地磁盘教程(开机自动挂载)

    win10下使用Rclone将OneDrive映射到本地磁盘教程(开机自动挂载) 下载rclone,winfsp和Git bash Rclone. Winfsp. 和 [Git bash](https ...

  9. [转帖]调优"四剑客"的实战演练,福尔摩斯•K带你轻松优化性能

     前言 天下武功,唯快不破.在侦探的世界中,破案效率永远是衡量一名侦探能力的不二法门.作为推理界冉冉升起的新星,大侦探福尔摩斯·K凭借着冷静的头脑.严谨的思维,为我们展现了一场场华丽而热血的推理盛宴. ...

  10. 【转帖】linux 内核分析工具 Dtrace、SystemTap、火焰图、crash等

    << System语言详解 >> 关于 SystemTap 的书. 我们在分析各种系统异常和故障的时候,通常会用到 pstack(jstack) /pldd/ lsof/ tc ...