ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ***** 读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器能够显示这些内容。要使用文本文件中的信息,首先需要将信息读取到内存中。为此,你可以一次性读取文件的全部内容,也可以以每次一行的方式逐步读取。 ## 10.1.1 读取整个文件 先准备被读取文件,放在和执行文件同一目录下 ![](https://img.kancloud.cn/3c/95/3c955264704159457d6581ce98be2d74_185x120.png) 执行读取的程序文件 ``` filename = 'pi_digits.txt' with open(filename) as file_object: lines = file_object.readlines() for line in lines: print(line.rstrip()) ``` 函数open()接受一个参数:要打开的文件的名称。 Python在当前执行的文件所在的目录中查找指定的文件。 函数open()返回一个表示文件的对象。 关键字with在不再需要访问文件后自动将其关闭 使用方法read()(前述程序的第2行)读取这个文件的全部内容,并将其作为一个长长的字符串存储在变量contents中。 通过打印contents的值,就可将这个文本文件的全部内容显示出来: ![](https://img.kancloud.cn/67/58/6758d22b16f741d6d111bf9873af2a95_200x95.png) read()到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一个空行。要删除末尾的空行,可在print语句中使用rstrip() 方法rstrip()删除(剥除)字符串末尾的空白。现在,输出与原始文件的内容完全相同 ![](https://img.kancloud.cn/9f/0a/9f0a7604c78e9fefbff11fdebad5c946_148x89.png) ## 10.1.2 文件路径 当你将类似pi_digits.txt这样的简单文件名传递给函数open()时, Python将在当前执行的文件(即.py程序文件)所在的目录中查找文件。 相对文件路径让Python到指定的位置去查找,而该位置是相对于当前运行的程序所在目录的。 Windows系统中,在文件路径中使用反斜杠(\)而不是斜杠(/) ``` with open('text\_files\\filename.txt') as file_object: ``` 将文件在计算机中的准确位置告诉Python,这样就不用关心当前运行的程序存储在 什么地方了。这称为绝对文件路径 ``` **在winows中** file_path = 'C:\Users\ehmatthes\other_files\text_files\filename.txt' with open(file_path) as file_object: ``` ## 10.1.3 逐行读取 读取文件时,常常需要检查其中的每一行。以每次一行的方式检查文件,可对文件对象使用for循环: ``` filename = 'pi_digits.txt' #给返回的文件对象命名为file_object with open(filename) as file_object: # 执行循环来遍历文件中的每一行 for line in file_object: print(line) ``` 我们打印每一行时,发现空白行更多了 ![](https://img.kancloud.cn/33/90/3390d3c0a0b5b858f2ba7cc4c7b4b673_230x80.png) ![](https://img.kancloud.cn/88/07/8807964714d0a511786e05767dc6fd20_888x362.png) ## 10.1.4 创建一个包含文件各行内容的列表 使用关键字with时, open()返回的文件对象只在with代码块内可用。如果要在with代码块外访问文件的内容,可在with代码块内将文件的各行存储在一个列表中,并在with代码块外使用该列表。 ``` filename = 'pi_digits.txt' with open(filename) as file_object: #将文件中的每一行存在列表中,该列表被存储到变量lines中 lines = file_object.readlines() #在with外,循环读取列表中的每一行 for line in lines: print(line.rstrip()) ``` 列表lines的每个元素都对应于文件中的一行 ![](https://img.kancloud.cn/d4/9d/d49dcf394d809289bbee2b3c3ac66667_858x123.png) ## 10.1.6 包含一百万位的大型文件 前面我们分析的都是一个只有三行的文本文件,但这些代码示例也可处理大得多的文件。如果我们有一个文本文件,其中包含精确到小数点后1 000 000位而不是30位的圆周率值,也可创建一个包含所有这些数字的字符串。为此,我们无需对前面的程序做任何修改,只需将这个文件传递给它即可。