最推荐使用文件对象迭代器逐行读取,内存占用小且效率高;对于大文件应避免readlines()以防内存溢出,可结合strip()去除换行符、指定encoding处理编码问题,用next(f)跳过标题行,或通过条件判断筛选含关键词的行。
Python读取文件每一行,核心在于利用Python提供的文件对象迭代器或者
readlines()
方法,当然,还有更灵活的
readline()
。选择哪种取决于你的具体需求,比如文件大小、内存限制以及是否需要对每一行进行实时处理。
Python读取文件每一行的方法有很多,这里提供几种常见的,并分析它们的优缺点。
如何高效读取大文件?
对于大文件,一次性加载到内存显然不可取。最推荐的方式是使用文件对象的迭代器。
with open('large_file.txt', 'r') as f: for line in f: # 处理每一行,例如打印 print(line.strip()) # 去除行尾的换行符
这种方式的优点是内存占用极小,因为它每次只读取一行。
with
语句确保文件在使用完毕后自动关闭,防止资源泄露。
line.strip()
移除行尾的换行符,让输出更干净。
立即学习“Python免费学习笔记(深入)”;
readlines()
readlines()
方法适用场景
readlines()
方法会将整个文件读取到一个列表中,列表中每个元素就是文件的一行。
with open('small_file.txt', 'r') as f: lines = f.readlines() for line in lines: print(line.strip())
readlines()
适用于小文件,因为它可以一次性将所有内容加载到内存。但是,对于大文件,这可能会导致内存溢出。它的优点是方便随机访问文件的任意一行,但如果只是顺序读取,那么迭代器方式更优。
使用
readline()
readline()
方法进行更细粒度的控制
readline()
方法每次只读取文件的一行。
with open('file.txt', 'r') as f: line = f.readline() while line: print(line.strip()) line = f.readline()
这种方式和迭代器类似,但需要手动调用
readline()
方法,稍微繁琐一些。不过,它提供了更细粒度的控制,例如可以在读取到特定行后停止。
如何处理文件编码问题?
如果文件不是UTF-8编码,可能会遇到
UnicodeDecodeError
。解决办法是在打开文件时指定编码。
with open('encoded_file.txt', 'r', encoding='gbk') as f: # 假设文件是GBK编码 for line in f: print(line.strip())
你需要根据文件的实际编码来选择正确的
encoding
参数。常见的编码有
utf-8
、
gbk
、
latin-1
等。
如何跳过文件的前几行?
有时,文件的前几行可能是标题或者注释,需要跳过。
with open('file_with_header.txt', 'r') as f: next(f) # 跳过第一行 next(f) # 跳过第二行 for line in f: print(line.strip())
next(f)
会从文件对象
f
中读取下一行,相当于指针向下移动一行。你可以根据需要多次调用
next(f)
来跳过任意行。
如何只读取包含特定关键词的行?
有时候,我们只需要处理包含特定关键词的行。
keyword = 'example' with open('file.txt', 'r') as f: for line in f: if keyword in line: print(line.strip())
这个例子中,只有包含关键词 “example” 的行才会被打印出来。你可以根据实际需求修改关键词和处理逻辑。