Python中如何实现每次读取文件1万行的功能?

用了 readlines ( 10000 ) Returns the next 10000 bytes of line. Only complete lines will be returned. 有没有可以直接用的函数呢?可以顺序每次读 1w 行,最后不足 1w 也能正常返回?


Python中如何实现每次读取文件1万行的功能?
11 回复
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

这个实现的关键点:

  1. 使用生成器(yield)避免一次性加载整个文件到内存
  2. 通过with open()确保文件正确关闭
  3. 每积累1万行就返回一个列表,然后清空继续读取
  4. 最后会返回剩余不足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) &gt;= 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)

觉得还是站在各位巨人肩膀上更好。

不知道每个文件有多少行啊,迭代器我再学习下。

非常感谢。不过我这个是个 txt,要按照行来读取。

这个太棒了我,试一下。
另外大家都怎么找到这些常用的模块,而不用自己封装一个呢?当然,高手,封装一个也是一秒钟的事儿。现成的模块对我这种外行来说,如何找到呢?

回到顶部