首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当生成一个大变量时,写入文件以绕过内存上限。Python 3.3

当生成一个大变量时,写入文件以绕过内存上限。Python 3.3
EN

Stack Overflow用户
提问于 2014-01-18 01:07:27
回答 2查看 74关注 0票数 0

我不知道这会有多高级,但是,我试图生成一个巨大的排列列表,然后解析它们,以一种特定的方式打印它们。THe的问题是,当我使用以下一行时:x=([''.join(i) for i in itertools.product("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",repeat=8)])

我遇到的问题是,我的计算机要么是32位,要么只有4G内存。因此,我想知道是否有一种方法可以在半程内停止这一行,将生成的所有内容写入txt文件,然后继续。这样就可以将变量存储在磁盘上,而不是存储在RAM中。然后,我将解析txt文件,以获得我正在寻找的情况。顺便说一下,我在Windows 7上。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-18 01:21:12

只需将其分解为组件,并在运行时保存。类似于:

代码语言:javascript
复制
for i in itertools.product(string.ascii_letters + string.digits, repeat=8):
     print(''.join(i))
票数 0
EN

Stack Overflow用户

发布于 2014-01-18 01:22:01

首先要注意的是:

代码语言:javascript
复制
>>> len("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890") ** 8
218340105584896L
>>> format(_, ",")
'218,340,105,584,896'

这就是有多少产品。写出来后,每一个都需要8个字节加上一个换行符(或其他分隔符)。

代码语言:javascript
复制
>>> 62 ** 8 * 9
1965060950264064L

因此,如果你购买大约2,000个1TB的磁盘,你就会有足够的磁盘空间来存储它们。

还想走这条路吗?-)一旦你买下所有的硬件:

代码语言:javascript
复制
import itertools
s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
with open("perms.txt", "w") as f:
    for i in itertools.product(s, repeat=8):
        f.write("".join(i) + "\n")

只需要很少的内存就能完成任务。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21198784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档