读取整个文件

文件pi_digits.txt

#文件pi_digits.txt
3.1415926535
8979323846
2643383279

下面的程序打开并读取整个文件,再将其内容显示到屏幕中:

with open("pi_digits.txt") as fileobject:
contents = fileobject.read()
print(contents)
#运行结果
3.1415926535
8979323846
2643383279

使用函数open()打开文件,函数open(0接受一个要打开的文件的名称参数,python在当前执行的文件所在的目录中查找指定的文件。函数open()返回一个表示文件的对象。然后将这个对象保存在后面使用的变量中,也可以说是文件句柄。关键字with在不需要访问文件后将其关闭。在这个程序中,我们没有使用close()来关闭文件,也可以这样做,但是如果程序存在bug,导致close()语句未执行,文件将不会关闭。有了表示pi_digits的文件的对象后,我们就可以使用方法read()来读取内容了,并将其作为一个长长的字符串存储在变量contents中。

文件路径

相对路径:对于当前目录的路径

linux中:

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

Windows中:

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

绝对路径:相对于根目录

linux中:

file_path = '/home/ehmatthes/other_files/text_files/filename.txt'
with open(file_path) as file_object:

Windows中:

file_path = 'C:\Users\ehmatthes\other_files\text_files\filename.txt'
with open(file_path) as file_object:

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

在读取文件的时候,常常是逐行读取;

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

filename = 'pi_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines()
print(lines)
for line in lines:
print(line.rstrip())
#运行结果
['3.1415926535\n', ' 8979323846\n', ' 2643383279\n']
3.1415926535
8979323846
2643383279

写入空文件

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

运行结果:

如果文件存在,则覆盖写入,若不存在则创建写入

I love programming.

在这个示例中,调用open()时提供了两个实参(见Ø)。第一个实参也是要打开的文件的名称;第二个实参('w')告诉Python,我们要以写入模式打开这个文件。打开文件时,可指定读取模式('r')、 写入模式('w')、 附加模式('a')或让你能够读取和写入文件的模式('r+')。如果你省略了模式实参, Python将以默认的只读模式打开文件。

附加到文件

filename = 'programming.txt'
with open(filename,'a') as file_object:
file_object.write("I also love python!\n")
file_object.write("I love creating apps\n")

#运行结果

在文件末尾添加

I love programming.
I also love python!
I love creating apps

处理异常

先看一个简单的异常:

print(5/0)
#运行结果
Traceback (most recent call last):
File "D:/python_cd/《Python编程从入门到实践》/division.py", line 1, in <module>
print(5/0)
ZeroDivisionError: division by zero

显然python无法这样做,因此你将看到一个traceback,指出的错误ZeroDivisionError是一个异常对象,这样python将停止运行程序,下面我们将告诉python发生了这样错的时候,该怎么做,而不是终止程序返回报错。

try:
print(5/0)
except:
print("You can't divide by zero!")
#运行结果
You can't divide by zero!

在这个示例中, try代码块中的代码引发了ZeroDivisionError异常,因此Python指出了该如何解决问题的except代码块,并运行其中的代码。这样,用户看到的是一条友好的错误消息,而不是traceback。

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)
#运行结果
Give me two numbers, and I'll divide them.
Enter 'q' to quit.
First number: 12
Second number: 6
2.0
First number: 12
Second number: 0
You can't divide by 0!

try-except-else代码块的工作原理大致如下: Python尝试执行try代码块中的代码;只有可能引发异常的代码才需要放在try语句中。有时候,有一些仅在try代码块成功执行时才需要运行的代码;这些代码应放在else代码块中。 except代码块告诉Python,如果它尝试运行try代码块中的代码时引发了指定的异常,该怎么办。 python中有一个pass语句,可在代码块中使用它来让python都不要做,比如在except语句下只加pass,表示报错是没有任何返回。

JSON模块

很多程序都要求用户输入某种信息,如让用户存储游戏首选项或提供要可视化的数据。不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结构中。用户关闭程序时,你几乎总是要保存他们提供的信息;一种简单的方式是使用模块json来存储数据。
模块json让你能够将简单的Python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。你还可以使用json在Python程序之间分享数据。更重要的是,JSON数据格式并非Python专用的,这让你能够将以JSON格式存储的数据与使用其他编程语言的人分享。这是一种轻便格式,很有用,也易于学习。 
json.dumps

import json
info={'name':'Tom',
'age':'',
'job':'work',}
f=open('file1.txt','w')
f.write(json.dumps(info))
f.close()

json.loads

import json
f=open('file1.txt','r')
data=json.loads(f.read())
f.close()
print(data)
print(data['name'])

《Python编程从入门到实践》_第十章_文件和异常的更多相关文章

  1. 《Python编程从入门到实践》第二章_变量和简单数据类型

    什么是变量呢? 举例: >>> message = "Hello,Python!" >>> print (message) Hello,Pyth ...

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

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

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

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

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

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

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

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

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

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

  7. Python编程从入门到实践笔记——用户输入和while循环

    Python编程从入门到实践笔记——用户输入和while循环 #coding=utf-8 #函数input()让程序暂停运行,等待用户输入一些文本.得到用户的输入以后将其存储在一个变量中,方便后续使用 ...

  8. Python编程从入门到实践笔记——字典

    Python编程从入门到实践笔记——字典 #coding=utf-8 #字典--放在{}中的键值对:跟json很像 #键和值之间用:分隔:键值对之间用,分隔 alien_0 = {'color':'g ...

  9. Python编程从入门到实践笔记——if语句

    Python编程从入门到实践笔记——if语句 #coding=utf-8 cars=['bwm','audi','toyota','subaru','maserati'] bicycles = [&q ...

随机推荐

  1. SOA IN Real World

    微软发布了一个名为“真实世界里的面向服务架构(SOA)”的电子书.这本书表达了微软对面向服务架构的观点,并包括了数个展示如何用微软产品和技术实现SOA的真实案例.书中解释到,SOA的功能型架构本身是松 ...

  2. day6学python 生成器迭代器+压缩文件

    生成器迭代器+压缩文件 readme的规范 1软件定位,软件的基本功能2运行代码的方法:安装环境,启动命令3简要的使用说明4代码目录结构说明,更详细点可以说明软件的基本原理5常见问题说明 ====== ...

  3. SQL数据库查询语言(1)

    目录 MySQL数据库 MySQL安装与配置 DDL数据定义语言 创建数据库 查看.删除数据库 修改.备份.恢复数据库 创建表 修改表 MySQL常用数据类型 DML数据操纵语言 Insert语句 m ...

  4. &(引用) 和 *(指针)

    引用: 引用相当于给引用的对象起一个别名,对引用的操作即是对原对象的操作. 使用方式: int cnt = 1024; int &x = cnt; 一般情况下引用的类型要和被引用对象一致(例外 ...

  5. Ubuntu 安装后的配置及美化(二)

    Ubuntu安装后的配置与美化(二) 上篇文章讲了安装ubuntu后的一系列基础的配置,已经可以满足日常的使用了,这篇文章讲一下安装 IDE 及一些其他的配置. 1.安装 SSR 下载 SSR 客户端 ...

  6. 公共子序列(luogu P1439)

    传送门 题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列. 输入输出格式 输入格式: 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列. 输出格式: 一个数,即最 ...

  7. phpstudy下安装phalcon

    其实,一共也就下面几步,顺利的话,两分钟完事. 第一步:下载和当前php版本对应的php_phalcon.dll 文件 第二步:将此文件放到php版本下的ext里面. 第三步:在php.ini中添加如 ...

  8. ubuntu下的pycharm4中文路径乱码

    修改字体: 设置(settings)->外观与行为(appearance & behavior) -> 外观(appearance) ->我选择的主题是Darcula 但其字 ...

  9. Django--队列2

    celery 4.2 -Ofair现在是默认的调度策略 关于-Ofair命令行选项的作用存在很多混淆,并且在解释中使用术语“预取”可能没有帮助,因为这个术语在AMQP中有多么混乱. 当使用prefor ...

  10. 斐讯 N1 刷 Armbian 5.64

    前言 N1 天天链是斐讯出的一款挖矿产品,虽然已经翻车,但是本身硬件配置还是很不错的,晶晨 S905D 主控,蓝牙 4.1,双频 WiFi,2G + 8G,USB2.0,HDMI.而一个只要不到 80 ...