Python中如何实现每次读取文件1万行的功能?
用了 readlines ( 10000 ) Returns the next 10000 bytes of line. Only complete lines will be returned. 有没有可以直接用的函数呢?可以顺序每次读 1w 行,最后不足 1w 也能正常返回?
Python中如何实现每次读取文件1万行的功能?
def read_file_in_chunks(file_path, chunk_size=10000):
"""
分块读取大文件,每次返回指定行数的生成器
Args:
file_path: 文件路径
chunk_size: 每次读取的行数,默认1万行
Yields:
包含指定行数的列表
"""
with open(file_path, 'r', encoding='utf-8') as file:
chunk = []
for line in file:
chunk.append(line.strip()) # 去掉换行符
if len(chunk) >= chunk_size:
yield chunk
chunk = [] # 重置块
# 返回最后剩余的行
if chunk:
yield chunk
# 使用示例
if __name__ == "__main__":
# 假设要读取一个大文件
for i, lines_chunk in enumerate(read_file_in_chunks("large_file.txt")):
print(f"第{i+1}个块,行数:{len(lines_chunk)}")
# 在这里处理每个块的数据
# 例如:批量处理、分析或写入其他文件
# process_chunk(lines_chunk)
# 示例:打印前5行的内容
for j, line in enumerate(lines_chunk[:5]):
print(f" 第{j+1}行: {line[:50]}...") # 只显示前50个字符
# 控制只显示前3个块作为演示
if i >= 2:
print("... (后续块省略)")
break
这个实现的关键点:
- 使用生成器(
yield)避免一次性加载整个文件到内存 - 通过
with open()确保文件正确关闭 - 每积累1万行就返回一个列表,然后清空继续读取
- 最后会返回剩余不足1万行的数据
内存效率高,适合处理GB级别的大文件。
总结:用生成器分块读取最合适。
非常感谢。请教如何才能找到自己需要的轮子呢。这个太棒了。
#2 善用 Google 和 StackOverflow 呗,我觉得我这半桶水能问出来的问题基本都是别人问过的……
建议迭代器返回,上限用参数传过去不就好了么-。-
linecache 模块了解下
自己封装一个呀
python<br>def rows_reader(filepath, size=10):<br> with open(filepath) as f:<br> tmp = []<br> for line in f:<br> tmp.append(line)<br> if len(tmp) >= size:<br> yield tmp<br> tmp = []<br> if tmp:<br> yield tmp<br><br><br>for rows in rows_reader('<a target="_blank" href="http://m.md" rel="nofollow noopener">m.md</a>', size=10):<br> print(rows)<br><br>
要是读数据的话可以试试 pandas
import pandas as pd
f = pd.read_csv(<file_name>, chunksize =10000, …)
更多参数看 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
然后
for chunk in f:
do_sth(chunk)
觉得还是站在各位巨人肩膀上更好。


