携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情
前言
当我们搜索到特定文件后,接下来通常需要进行的操作是打开并读取其内容。文本文件是非常简单但同时也非常强大的常用文件。它们以纯文本形式存储数据,并不具有复杂的二进制格式。
Python 中内置了对于文本文件的支持,可以很容易将其视为 Python 字符串的集合,每行都可以视为一个字符串。
Python 读取文本文件
本节中,我们将读取 python_zen.txt 文件,其中包含了 Python 之禅 (The Zen of Python),其描述 Python 背后的设计原则。可以通过输入 import this,在 Python 解释器中打印 Python 之禅:
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
...
打开并逐行打印整个文件:
>>> with open('python_zen.txt') as f:
... for line in f:
... print(line)
...
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
...
使用 open() 函数可以以文本模式打开文件,其将返回一个文件对象,然后可以对其进行迭代以逐行返回。
with 上下文管理器是一种非常方便的文件处理方式。它会在完成使用后关闭文件(即使在文件处理过程中引发了异常,它同样也会如此)。with 上下文管理器是处理文件的首选方式,但它不是唯一的方式。我们也可以手动打开和关闭文件:
>>> file = open('python_zen.txt')
>>> content = file.read()
>>> file.close()
close() 方法可以确保关闭文件并释放与打开文件相关的资源。read() 方法会一次性读取整个文件,而不是逐行读取。read() 方法还接受以字节为单位的 size 参数,该参数限制读取的数据大小。例如,file.read(1024) 将返回最多 1KB 的内容,对 read() 的下一次调用将从该返回点继续读取。
我们可以根据任务需求来迭代和过滤文本内容,例如可以以多种方式过滤的字符串然后返回。例如打开文件并打印包含指定字符串 (should) 的行:
>>> with open('python_zen.txt', 'r') as f:
... for line in f:
... if 'should' in line.lower():
... print(line)
...
Errors should never pass silently.
There should be one-- and preferably only one --obvious way to do it.
有时,我们可能并不需要读取整个文件。因为逐行遍历文件只会在执行过程中读取文件,因此我们可以随时停止,避免读取文件的其余部分。对于一些大型文件,这可以减少内存使用和时间消耗。例如,打开文件并打印第一个包含单词 should 的行:
>>> with open('python_zen.txt', ‘rt’) as f:
... for line in f:
... if 'should' in line.lower():
... print(line)
... break
...
Errors should never pass silently.