CodeGym /课程 /Python SELF ZH /从文件中读取数据

从文件中读取数据

Python SELF ZH
第 21 级, 课程 1
可用

2.1 读取整个文件

在Python中,有好几种方法可以读取文本文件。每种方法都有自己的优势,适合不同的场景。读取文本文件的主要方法有:读取整个内容、逐行读取、指定字符数读取等。

方法 read() 会将文件的所有内容读取到一个字符串中。


file = open('example.txt', 'r')
content = file.read()
print(content)
file.close()

这是读取文件的一种非常简单的方法——只需调用一个方法,文件的所有内容就能作为一个字符串获取。不过这种方法也有缺点——如果文件包含例如200MB的日志,它会读取得很慢,同时你的程序内存会被迅速耗尽。

2.2 读取文件的所有行

对方法 read()有一种替代方案——即方法 readlines()。它同样会将整个文件读取到内存中,但返回的不是一个大字符串,而是一个字符串列表——文件的每一行都会是列表中的一个元素。

方法 readlines() 会读取文件的所有行并将它们作为字符串列表返回。


file = open('example.txt', 'r')
lines = file.readlines()
for line in lines:
    print(line.strip())  # strip() 删除多余的空格和换行符
file.close()

如果你事先知道需要逐行处理文件内容,这种方法会很方便。但缺点是,对于非常大的文件,这种方法可能会耗费大量内存,因为所有行都被加载到内存中。

2.3 逐行迭代文件

file 对象有一个内置的迭代器,所以可以使用 for 循环逐行遍历其内容。这使得逐行读取文件成为可能,而无需将整个文件加载到内存中。

例子:


file = open('example.txt', 'r')
for line in file:
    print(line.strip())  
file.close()

对于大文件,这种方法在内存方面更加有效,因为每次只读取一行。不过,如果需要返回上一行或变更读取顺序,这种方法可能会比较麻烦。

让我们再来比较一下这种方法和前面的:

使用迭代器 使用方法 readlines()

file = open('example.txt', 'r')

for line in file:
    print(line.strip())  
                            
file.close()
                

file = open('example.txt', 'r')
            
lines = file.readlines()
for line in lines:
    print(line.strip())  
                        
file.close()
                

这种方法更简单更快。不过,当你在处理真实项目时,有时会更快地将所有数据加载到内存中并在那里处理。

readline() 和 readlines() 方法都用于从文件中读取行,但它们的工作方式不同。readline() 每次读取一行,这让你可以控制读取流程并避免将整个文件加载到内存中。这在逐行处理文件或文件太大而无法完全加载到内存中时很方便。

而 readlines() 则相反,它会一次性读取文件的所有行,并将它们返回为一个列表。如果需要快速获取文件的所有行进行进一步处理,这个方法会很方便。不过它会占用更多的内存,尤其是对于大的文件,因为整个文件都会被加载到内存中。

根据具体任务,readline() 在内存节省和读取控制上可能更优,而 readlines() 则在需要快速获取文件所有行时很方便。

2.4 读取文件的部分内容

如果文件太大,你可以分段读取。read(n) 方法可以传入参数 n——要读取的字符数。文件中的字符数如果少于n,read() 方法将直接读取到文件结束。

例子:


file = open('example.txt', 'r')
content = file.read(10)  # 读取前10个字符
print(content)
file.close()

这个方法适合于分段读取大文件或处理固定大小的数据块。但这种方法会忽略文件的行分隔——行可能会在中间被截断。

2.5 按行读取文件

如果由于某些原因你不想使用迭代器,可以手动逐行读取文件。为此,file 对象有一个 readline() 方法。不要与 readlines() 混淆。

方法 readline() 每次从文件中读取一行。

例子:


file = open('example.txt', 'r')
line = file.readline()
while line:
    print(line.strip())
    line = file.readline()
file.close()

在这个例子中,我们逐行读取文件内容,直到读取到的行为空。

2
任务
Python SELF ZH, 第 21 级, 课程 1
已锁定
读取整个文件
读取整个文件
2
任务
Python SELF ZH, 第 21 级, 课程 1
已锁定
遍历文件的行
遍历文件的行
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION