从文件中读取数据

首先准备一个文本文件,文件中存储着普通文本数据。读取文件需要调用open()和read()函数。

读取整个文件

代码示例:

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

在读取文件之前,必须先要打开文件,这样才能访问它。打开文件需要调用open()函数,它接受一个参数:要打开的文件路径名称(可以是相对路径,也可以是绝对路径,相对路径时,Python将会以当前执行的文件所在的目录作为相对位置去查找指定的文件)。

注意:在Linux和OS X中,使用斜杠(/)分割文件路径;而在Windows系统中,使用反斜杠(\)分割文件路径。

函数open()返回一个表示文件的对象。例如此处的open('pi_digits.txt') 返回一个表示文件pi_digits.txt的对象,Python将这个对象存储在我们将在后面使用的变量file_object中。

with关键字

关键字with在不再需要访问文件后将其关闭。它可以解决显式调用close()函数可能出现的一些问题,如果显式的调用close()函数,一旦程序出现异常,导致close()语句还未执行,文件将不会关闭,而且如果过早的调用close(),将会出现文件读取错误,因此使用with关键字可以很好的避免这类问题,Python让你只管打开文件,并在需要时使用它,Python自会在合适的时候自动将其关闭。

另外还需要注意一点,使用关键字with时,open()返回的文件对象只在with代码块内可用。

read()函数

如果不给read()函数传递参数,将会读取全部内容。

注意:read()读取到文件末尾时会返回空白符(文本的末尾有一个看不见的换行符),为了去除多余的空白,应该结合使用rstrip()函数:

#去除字符串末尾的多余空白
print(contents.rstrip())

逐行读取

#逐行读取
with open('pi_digits.txt') as file_object2:
for line in file_object2:
print(line.rstrip())

可以直接使用for循环遍历文件对象,去读取每一行。

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

使用关键字with时,open()返回的文件对象只在with代码块内可用,可以先将读取的内容放入一个列表中,然后在with代码块的外面去访问文件的内容。

#创建包含文件各行内容的列表
with open('pi_digits.txt') as file_object3:
#从文件中读取每一行,并将其存储在一个列表中
lines=file_object3.readlines()
#在with代码块的外面读取该列表
for line in lines:
print(line.rstrip())

将数据写入文件

将数据写入到文件中,需要调用open()和write()函数。

写入空文件

filename='test.txt'
#写入空文件
with open(filename,'w') as file_obj:
file_obj.write('hello python!')

写入文件时,也需要使用open()函数先打开文件,不同的是打开文件的模式不同。open()函数的第一个参数用来指定文件名,第二个参数指定打开的模式,相关模式如下:

  • 写入模式(w):如果文件不存在,将会创建一个空文件。如果文件已经存在,将会在返回该文件对象前清空该文件。即永远以空文件的形式返回文件对象,不管该文件是否有数据。
  • 读取模式(r):如果open()函数省略了模式实参,将默认以该模式打开文件,即文件只能读取不能写入。
  • 附加模式(a):不清空原文件,而是将新写入的内容附加到原文件的末尾。如果文件不存在,将会创建一个空文件,并附加内容。
  • 读取和写入模式(r+

使用open()写入文件时,如果文件不存在,将会自动创建它。

写入多行

#写入多行
with open(filename,'w') as file_obj2:
file_obj2.write('java \n')
file_obj2.write('python \n')

write()函数不会在你写入的文本末尾添加换行符,因此写入多行时,需要手动的在字符串的末尾添加换行符(\n)。

附加到文件

#附加到文件
with open(filename,'a') as file_obj3:
file_obj3.write('one \n')
file_obj3.write('two \n')

以附加模式打开文件时,python不会在返回文件对象前清空文件,而是将要写入到文件的内容追加到原文件的末尾。如果指定的文件不存在,将创建一个空文件,并附加内容。

异常

Python在程序执行期间发生错误时,都会创建一个异常对象,如果不做处理,将会显示一个Traceback,其中包含有关异常的报告。为了处理异常,在Python中的异常使用try-except代码块处理。厦门叉车价格多少钱

使用try-except代码块

当你认为可能发生错误时,可以编写try-except代码块来处理可能引发的异常。代码块格式如下:

try:
可能会发生异常的代码片段
except 异常对象:
异常处理的代码片段

例如,捕捉被除数为0引发的ZeroDivisionError异常对象:

try:
print(5/0)
except ZeroDivisionError:
print('被除数不能为0')

try-except-else代码块

else代码块不是必须的,它只有在需要依赖于try代码块成功执行时才需要。它在try-except中的结构位置如下:

try:
片段1
except 异常对象:
片段2
else:
片段3

try-except-else代码块的工作原理:python尝试执行try代码块中的片段1代码,片段1的代码应该是只有可能引发异常的代码,不会引发异常的代码不要放在try代码块中(片段1)。如果片段1的代码发生了异常,就执行片段2的代码进行异常处理,否则,如果片段1的代码没有发生异常,就执行片段3的代码,片段3的代码应该是仅在片段1的代码成功执行时才需要运行的代码。

while True:
first_num=input("第一个数:")
if first_num=='q':
break
second_num=input('第二个数:')
try:
result=int(first_num)/int(second_num)
except ZeroDivisionError:
print('被除数不能为0')
else:
print('值为:'+str(result))

使用pass关键字在抛出异常时不做任何处理

如果在捕获到异常时,并不想写任何处理操作,可以直接在片段2的代码中,使用pass关键字。

try:
片段1
except 异常对象:
pass

pass语句还充当了占位符,它提醒你在程序的某些对方什么都没有做,并且以后也许要在这里做些什么。

处理FileNotFoundError异常

使用文件读写操作时,如果文本名错误或文件不存在,就会抛出异常。此时,可以通过捕获FileNotFoundError异常对象进行处理。

filename='alice.txt'
try:
with open(filename) as f_obj:
contents=f_obj.read()
except FileNotFoundError:
print('文件找不到!')

附加:存储JSON格式数据到文件中

需要导入json模块来存储数据,然后调用json.dump()和json.load()分别存储和读取JSON数据。

使用json.dump()来存储数据

#导入json模块
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.load()来读取数

import json
filename='numbers.json'
with open(filename) as f_obj:
#读取数据
numbers=json.load(f_obj)
print(numbers)

Python入门学习系列——Python文件和异常的更多相关文章

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

    python入门学习:9.文件和异常 关键点:文件.异常 9.1 从文件中读取数据9.2 写入文件9.3 异常9.4 存储数据 9.1 从文件中读取数据 9.1.1 读取整个文件  首先创建一个pi_ ...

  2. python入门学习之Python爬取最新笔趣阁小说

    Python爬取新笔趣阁小说,并保存到TXT文件中      我写的这篇文章,是利用Python爬取小说编写的程序,这是我学习Python爬虫当中自己独立写的第一个程序,中途也遇到了一些困难,但是最后 ...

  3. [Python 从入门到放弃] 6. 文件与异常(二)

    本章所用test.txt文件可以在( [Python 从入门到放弃] 6. 文件与异常(一))找到并自行创建 现在有个需求,对test.txt中的文本内容进行修改: (1)将期间的‘:’改为‘ sai ...

  4. 《Python爬虫学习系列教程》学习笔记

    http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己 ...

  5. python入门学习:8.类

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

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

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

  7. [转]《Python爬虫学习系列教程》

    <Python爬虫学习系列教程>学习笔记 http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多. ...

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

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

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

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

随机推荐

  1. 在不升级 mysql 的情况下直接使用 mysql utf8 存储 超过三个字节的 emoji 表情

    由于现在数据库的版本是5.5.2,但是看网上说要直接存储emoji表情,需要升级到5.5.3然后把字符集设置为utf8mb4,但是升级数据库感觉属于敏感操作. 考虑了多久之后直接考虑使用正则来替换,但 ...

  2. 【转】纯JS省市区三级联动(行政区划代码更新至2015-9-30)

    本文代码实现的功能是省市区三级联动下拉列表,纯Javascript,网上已有很多这方面的代码.但是作为一个新手,这是我的第一篇CSDN博客,发此文的目的主要是学习交流,希望看到的朋友发现有什么不对的地 ...

  3. Python 日志输出

    昨天的任务是需要记录各操作的性能数据,所以需要用这种格式来输出日志:{"adb_start_time": 1480040663, "tag_name": &qu ...

  4. [LuoguP1462]通往奥格瑞玛的道路($SPFA+$二分)

    #\(\mathcal{\color{red}{Description}}\) \(Link\) 有一个图,求其在\(1-N\)的最短路小于一个给定值下,点权最大值的最小值. #\(\mathcal{ ...

  5. 升级时针对Source oracle home 不存在解决办法

    针对于oracle升级从11.2.0.4升级至12.1.0.1,遇到的问题解决. 运行/oracle/app/product/12.1.0.1/dbhome_1/bin/dbua 后 在选择数据库ho ...

  6. expdp导出时报错ora-16000

    一.问题现象:在对数据库进行expdp导出时发生报错ora-16000,脚本如下: nohup expdp "'/ as sysdba'" schemas=shp DIRECTOR ...

  7. C++程序设计入门 之常量学习

    常量: 常量的定义格式:const datatype CONSTANTNAME = VALUE 常量的命名规范:符号常量(包括枚举值)必须全部大写并用下划线分隔单词 例如:MAX_ITERATIONS ...

  8. linux-2.6内核驱动学习——jz2440之输入子系统

    如果按照上一篇记录的那样,只有本公司的人或者自己才能使用驱动.想写出一个通用的驱动程序,让其他应用程序来无缝移植,需要使用现成的驱动——输入子系统. /drivers/input/input.c #d ...

  9. Wifi NAT Driver

    最近遇点奇葩问题,最开始以为被种马了经检测发现不是,分享下以后大家出现类似也好解决:同时列出尝试过程以便大家以后自行排除自己网络问题: 症状: 网络连接右下角图标显示为网卡无线网卡和有线均禁用状态,查 ...

  10. 2_C语言中的数据类型 (六)浮点数

    1.1       浮点float,double,long double类型 1.1.1          浮点常量,变量 Float在32位系统下是4个字节,double在32位系统下是8个字节 小 ...