PYTHON文件和异常(1)从文件中读取数据

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

1、读取整个文件

要读取文件,需要一个包含几行文本的文件。下面首先创建一个文件,它 包含精确到小数点后30位的圆周率值,且在小数点后每10位处换行:

pi_digits.txt

3.1415926535
  8979323846
  2643383279

要动手尝试后续示例,可在编辑器中输入这些数据行,再将文件保存为 pi_digits.txt, 请将该文件保存到本章程序所在的目录。

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

file_reader.py

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

在这个程序中,第一行代码做了大量的工作。我们先来看看函数open()。 要以任何方式使用文件,那怕仅仅是打印其内容,都得先打开文件,才能访问它。函数open()接受一个参数:要打开的文件的名称。Python在当前 执行的文件所在的目录中查找指定的文件。在本例中,当前运行的是 file_reader.py,因此Python在file_reader.py所在的目录中查找 pi_digits.txt。函数open()返回一个表示文件的对象。在这里, open('pi_digits.txt')返回一个表示文件pi_digits.txt的对象, Python将该对象赋给file_object供以后使用。

关键字with在不再需要访问文件后将其关闭。在这个程序中,注意到我们 调用了open(),但没有调用close()。也可以调用open()和close()来 打开和关闭文件,但这样做时,如果程序存在bug导致方法close()未执 行,文件将不会关闭。这看似微不足道,但未妥善关闭文件可能导致数据 丢失或受损。如果在程序中过早调用close(),你会发现需要使用文件时 它已关闭(无法访问),这会导致更多的错误。并非在任何情况下都能轻 松确定关闭文件的恰当时机,但通过使用前面所示的结构,可让Python去 确定:你只管打开文件,并在需要时使用它,Python自会在合适的时候自 动将其关闭。

有了表示pi_digits.txt的文件对象后,使用方法read()(前述程序的第 二行)读取这个文件的全部内容,并将其作为一个长长的字符串赋给变量 contents。这样,通过打印contents的值,就可将这个文本文件的全部 内容显示出来:

3.1415926535
  8979323846
  2643383279
  

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

3.1415926535
  8979323846
  2643383279

2、文件路径

将类似于pi_digits.txt的简单文件名传递给函数open()时,Python将在当前执行的文件(即.py程序文件)所在的目录中查找。

根据你组织文件的方式,有时可能要打开不在程序文件所属目录中的文 件。例如,你可能将程序文件存储在了文件夹python_work中,而该文件夹 中有一个名为text_files的文件夹用于存储程序文件操作的文本文件。虽 然文件夹text_files包含在文件夹python_work中,但仅向open()传递位 于前者中的文件名称也不可行,因为Python只在文件夹python_work中查 找,而不会在其子文件夹text_files中查找。要让Python打开不与程序文 件位于同一个目录中的文件,需要提供文件路径,让Python到系统的特定 位置去查找。

由于文件夹text_files位于文件夹python_work中,可以使用相对文件路径 来打开其中的文件。相对文件路径让Python到指定的位置去查找,而该位 置是相对于当前运行的程序所在目录的。例如,可这样编写代码:

with open('text_file/file.name.txt') as file_object:

这行代码让Python到文件夹python_work下的文件夹text_files中去查找指 定的.txt文件。

注意 显示文件路径时,Windows系统使用反斜杠(\)而不是斜杠 (/),但在代码中依然可以使用斜杠。

还可以将文件在计算机中的准确位置告诉Python,这样就不用关心当前运 行的程序存储在什么地方了。这称为绝对文件路径。在相对路径行不通 时,可使用绝对路径。例如,如果text_files并不在文件夹python_work 中,而在文件夹other_files中,则向open()传递路径'text_files/filename.txt'行不通,因为Python只在文件夹 python_work中查找该位置。为明确指出希望Python到哪里去查找,需要提 供完整的路径。

绝对路径通常比相对路径长,因此将其赋给一个变量,再将该变量传递给 open()会有所帮助:

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

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值