我有一些很大的文件,我正试图用这些代码获得所有的组合

for text1, text2 in itertools.product(open('text1.txt'), open('text2.txt')):
    t3 = (text1.strip() + text2.strip())
    time.sleep(1)
    print(t3)

使用小文件进行测试,效果很好,但当使用大文件时,什么都没有发生,我猜它会将文件加载到内存中,所以不会将整个文件加载到内存中

推荐答案

这是documented:

product()次运行之前,它完全消耗了输入的可重用项,

注意,在这种特殊情况下,您可以执行以下操作:

with open("text1.txt") as f1, open("text2.txt") as f2:
    for text1 in f1:
        for text2 in f2:
            # do some stuff
            t3 = (text1.strip() + text2.strip())
        f2.seek(0) # reset inner file cursor

这是可能的,因为文件迭代器的性质-您可以从头开始搜索,迭代器会被有效重置(这也很好,也很有效!).但这通常不适用于iterables或迭代器,因此itertools.product只需将迭代器的两个列表具体化即可处理一般情况

Python相关问答推荐

如何在numpy数组的每一行中将第n个非零元素更改为零

如何将Pandas 数据框中的多列统一为多索引?

来自高吞吐量源的实时数据绘图

从另一个数据帧映射值

获取列表中最大值的索引并返回后续列表中的值

从python中的数据中查找并消除对倒数

Python 的 VS Code 函数签名 IntelliSense 来自哪里?

我不确定如何从 HTML 打印我需要的其余信息

从 pandas 数据框中 Select 具有多个条件的非 NaN 行

从 Python 2 迁移到 3 时的文件描述符/套接字处理差异

在 Pandas 中,如何仅在包含 NaN 的列中对数值执行 .diff() 方法?

无法使用拆分操作从 URL 中正确提取 ID

将具有单个元素和列表的列表转换为平面列表

如何从控制台 Python 中删除最后几个字符?

GZIP 解压结果不同(PHP / Python)

通过多进程产生的对象标识

如何将数据帧的字典更改为一个具有多列的数据帧

tensorflow 的负巨大损失

While 循环不工作(函数和 Time.Sleep)

Pandas :列的值,然后按相同的 ID 分组和合并