兔c同学的一篇关于 python 语言如何从文件中读取数据(python 的文件和异常)

python 集,这篇专栏的文章写以至此,已经囊括了编写组织有序而又易于使用的程序所需的基本技能。眼下,该考虑让程序目标更明确、用途更大了。

(python 的文件和异常)章节,我们将学习处理文件,让程序能够快速地分析大量的数据。 然后,学习错误处理,避免程序在面对意外情形时崩溃。 还有,学习异常,
它们是python 创建的特殊对象,用于管理程序运行时出现的错误。 最后,学习 json,它让你能够保存用户数据,以免在程序停止运行后丢失。

文章目录

        • 1. 从文件中读取数据
          • 1.1 读取整个文件
            • open() 函数
            • with 关键字
            • read() 函数
            • 代码执行结果
          • 1.2 文件路径
            • 相对路径
            • 绝对路径
          • 1.3 逐行读取
          • 1.4 创建一个包含文件各行内容的列表
          • 1.5 使用文件的内容

1. 从文件中读取数据

文件存储可存储的数据量多得难以置信:天气数据、交通数据、社会经济数据、文学作品等。每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其如此。

例如:你可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器能够显示这些内容。

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

1.1 读取整个文件

要读取文件,需要一个包含几行文本的文件。下面首先来创建一个文件:
Tu_c.txt
兔c同学的一篇关于 python 语言如何从文件中读取数据(python 的文件和异常)_第1张图片

创建好了文本内容。
下面的程序打开并读取这个文件,再将其显示到屏幕上:

with open('Tu_c.txt') as file_object:
	contets = file_object.read()
	print(contets)

在检查运行效果之前,先跟大家说明一下这里新接触到的新技能点:

open() 函数

如果你想使用一个文件的第一步必然是先打开这个文件。然后才能做到访问。open()函数接受一个参数,而这个参数就是你要打开文件的名称,然后 python 会在当前执行的文件所在的目录中查找指定的文件。文件被查找到以后,会以对象的形式返回。


with 关键字

with 关键字会在你不需要访问文件后将其关闭,这里我们用到了 open() 函数去读取文件,可是没有用到 与其相对应的 close () 函数来关闭文件,这是因为如果程序出现 bug,或者是异常关闭的情况,就会导致 文件的内容出现问题,例如丢失,无法访问。所以我们利用 with关键字,将文件的关闭工作 交给 python 去处理。


read() 函数

read() 函数负责读取 open() 获取到文件的内容,并将其作为一个长长的字符串存储在 contets中。


代码执行结果

最后,我们来看一下这段程序的运行结果:
兔c同学的一篇关于 python 语言如何从文件中读取数据(python 的文件和异常)_第2张图片

1.2 文件路径

上面的示例,我们将 被读取的文件 和 定义读取程序放在了同级目录下,两者处于同一路径,我们直接通过 open 函数 python 就会帮助我们去执行,但!如果不在同一目录呢?也就是说,不在同一目录的条件下,open 函数中的参数我们该怎么定义呢?

相对路径

一种方式就是通过相对路径来获取。
我们可以将代码这样进行定义:

with open('文件夹名称\Tu_c.txt') as file_object:

将代码这样定义,open函数就可以让python到指定文件夹下去寻找指定的文本文件了。

在windows系统当中,路径分隔符用反斜杠 \,而不是斜杠 /


绝对路径

亦或者也可以使用绝对路径,就是将 盘符,文件夹…文件名称,等一些列的准确路径告诉python。这种称为绝对路径。

由于绝对路径通常较长,建议将其存储在变量当中,
例如你可以这样定义代码:

file_pat =r'G:\python_tl\10'
with open(file_path) as file_object:
1.3 逐行读取

读取文件时,常常需要检查其中的每一行:

如果要以每次一行的方式检查文件,可对文件对象使用for循环。

filename ='hyf.txt'
with open(filename) as file_object:
	for line in file_object:
		print(line)

在这段代码当中,我将定义好的文件名存储在一个变量当中,
又将存有路径的变量传入到 open() 函数当中,
with 关键字 为我们访问open函数接收到的文件内容,在通过 for循环 将其逐行打印出来。

逐行读取的区别在于,read() 函数的读取,不能读取太长的文件内容。
而逐行读取,会将文件里冗长的内容也逐行读取出来。

现在,我们来看一下读取寒窑赋这段代码的运行结果:
兔c同学的一篇关于 python 语言如何从文件中读取数据(python 的文件和异常)_第3张图片


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

使用 with 关键字,open() 函数返回的对象只能在 with 代码块内使用。
如果要在 with 代码块外访问文件的内容,可在 with 代码块内讲文件的各行存储在一个列表中,并在 with代码块外使用该列表。

这样你就可以立即处理文件的各个部分,也可推迟到程序后面在处理。

filename ='hyf.txt'

with open(filename) as file_object:
	lines = file_object.readlines()

for line in lines:
	print(line.rstrip())

在这段代码中,用到的 readlines() 函数从文件中读取每一行,并将其存储到一个列表当中;接下来,这个列表被存储到 变量 lines 当中,而 lines 变量,在 with 代码块之外也是可以使用的。

现在 我们就来看一下这段 寒窑赋的展示效果:
兔c同学的一篇关于 python 语言如何从文件中读取数据(python 的文件和异常)_第4张图片

但是这段寒窑赋对比上面示例的那段为什么少了一行空行呢?

因为逐行打印结束之后,本身就会产生一行空行了,然而 print 语句,本身还有一行空行,所以就是两行空行。而这段示例中,在 print 输出内容时,调用了 rstrip() 函数,删除了一行空行,所以输出效果就剩下每段一个空行了。


1.5 使用文件的内容

将文件读取到内存当中,就可以以任何方式使用这些数据了。下面以简单的方式使用圆周率的值。


首先,准备好文本文件的内容。
兔c同学的一篇关于 python 语言如何从文件中读取数据(python 的文件和异常)_第5张图片

接着,先创建一个字符串,它包含文件中存储的所有数字,
且没有任何空格:

filename ='yzl.txt'

with open(filename) as file_object:
	lines = file_object.readlines()

pi_string =''
for line in lines:
	pi_string += line.rstrip()

print(pi_string)
print(len(pi_string))

其实这段代码,就是基于 1.4 技能点的一个延伸。
还是像之前一样,用 with 来访问 open 接收到的参数,然后该文件的内容通过循环以逐行打印的方式 输出,而在输出之前,又定义了一个空的字符串变量,以清楚空格的形式将要输出的内容,全部赋值到变量当中。
做完了上述操作后,直接打印这个变量,并且多调用了一次 print() 语句,为的是通过 len 函数来查看一下 这个字符串中存储了多少个数字。

下面,我们看一下输出结果:
兔c同学的一篇关于 python 语言如何从文件中读取数据(python 的文件和异常)_第6张图片

可是你知道吗?
你看到的这些数字并不是数字,而是字符串。如果你想输出真正意义上的字符串,
需要调用 int() 方法,将其转换类型。或者是 float() 将其转换为 浮点类型。


喜欢看兔c文章的同学,可以关注我一下。
明天给大家分享 python 的写入文件相关内容。

你可能感兴趣的:(《Python,从入门到实践》,python,开发语言)