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

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相关问答推荐

如何使用symy打印方程?

删除最后一个pip安装的包

类型错误:输入类型不支持ufuncisnan-在执行Mann-Whitney U测试时[SOLVED]

对于一个给定的数字,找出一个整数的最小和最大可能的和

Pandas 都是(),但有一个门槛

如何在Django基于类的视图中有效地使用UTE和RST HTIP方法?

对象的`__call__`方法的setattr在Python中不起作用'

NumPy中条件嵌套for循环的向量化

Python逻辑操作作为Pandas中的条件

如何启动下载并在不击中磁盘的情况下呈现响应?

用渐近模计算含符号的矩阵乘法

Matplotlib中的字体权重

Python Pandas—时间序列—时间戳缺失时间精确在00:00

如何获取Python synsets列表的第一个内容?

统计numpy. ndarray中的项目列表出现次数的最快方法

从嵌套极轴列的列表中删除元素

Matplotlib中的曲线箭头样式

替换包含Python DataFrame中的值的<;

大型稀疏CSR二进制矩阵乘法结果中的错误

大Pandas 中的群体交叉融合