python 读取文本及 read()、readline() 和 readlines()区别

如题所述

第1个回答  2024-08-16
在Python中,处理文本文件时,`open()`函数是基本操作。让我们深入了解`read()`, `readline()`, 和 `readlines()` 的功能和使用场景。

首先,打开文件是通过`open('filename', 'mode')`完成的,其中`'mode'`可以是'r'(读取)或'r+'(读写),默认为文本模式。打开不存在的文件会引发`FileNotFoundError`。推荐使用`with`语句,确保文件在操作后自动关闭,以避免资源泄露。

`read()`方法一次性读取文件的全部内容,包括行尾的换行符`\n`。如果不需要换行符,需要手动处理。`readline()`逐行读取,每次返回一行直到文件结束。`readlines()`则返回一个包含所有行的列表,每行末尾同样包含`\n`。

例如,读取并处理文件的行:

python

with open('test1.txt', 'r') as f1:

lines = f1.readlines()

for line in lines:

line = line.rstrip('\n')

处理两个文件找出相同IP地址时,可以先读取并清理行尾,然后使用二分查找(`bisect_left`)提高效率,最后用`set`去重:

python

with open('test1.txt', 'r') as f1, open('test2.txt', 'r') as f2:

list1 = [line.strip('\n') for line in f1.readlines()]

list2 = [line.strip('\n') for line in f2.readlines()]

list2.sort()

same_data = [line for line in list1 if bisect.bisect_left(list2, line) < len(list2) and list2[bisect_left(list2, line)] == line]

print(list(set(same_data)))

写入文件时,'w'模式会覆盖原有内容,'a'模式则追加,'w+' 和 'a+' 可读写。二进制文件使用'rb', 'wb', 'ab'等模式。`file_obj.seek()`用于定位文件指针,对文本模式的'w'和'a'不起作用。

处理非UTF-8编码文件时,记得指定`encoding`参数,如`open('test.txt', 'r', encoding='gbk')`。遇到编码错误,可以设置`errors='ignore'`来忽略错误字符。

总的来说,`read()`, `readline()`, 和 `readlines()`在处理文本文件时各有其用途,选择哪种取决于具体需求,同时注意正确处理文件操作和编码问题。
相似回答