Python 3:如何以随机顺序迭代大文件中的所有行(+1百万行)

Mon*_*ons 4 python random loops shuffle python-3.x

好的,所以我有多个文本文件,每个文件包含超过500.000甚至1.000.000行.

目前我这样做:

import random

def line_function(line):
    # Do something with given line

def random_itteration(filepath):
    with open(filepath) as f:
        lines = f.readlines()
        random.shuffle(lines)
        for line in lines:
            result = line_function(line)
Run Code Online (Sandbox Code Playgroud)

问题是,在Python的文件random.shuffle()清楚地状态(我加的):

注意,即使对于小len(x),x的排列总数也可以快速增长,大于大多数随机数生成器的周期.这意味着永远不会产生长序列的大多数排列.例如,长度为2080的序列是可以在Mersenne Twister随机数生成器的周期内拟合的最大序列.

所以问题是:

什么是使我的设置按预期工作的最快和最有效的方法?

更多信息:

我有理由将line_function()应用于随机行,而不是简单地按照它们所处的顺序迭代它们.另请注意,我更倾向于只处理每一行一次.

最后,不幸的是,将文本文件预先混洗或将其分成较小的文件是不可取的.而不是我要问的.


任何见解都更受欢迎!Thnx提前了.

use*_*ica 5

正如Mark Dickinson所说,您引用的文档行对现实世界的代码基本上没有实际意义.它绝对与您的代码没有任何关联.

shuffle是否在所有可能的排列上产生真正均匀的随机分布并不重要.重要的是洗牌是否可以与这种分布区分开来,达到某种可区分标准.random.shuffle在统计上无法区分完全随机的混乱,直到Mersenne Twister算法的质量,并且它的可区分方式与周期无关.

您无需执行任何特殊操作即可使设置"按预期工作".random.shuffle已经有效了.