小编Pie*_*nne的帖子

如何在Python中打开文件后释放内存

我在Python中打开一个3 GB的文件来读取字符串.然后我将这些数据存储在字典中.我的下一个目标是使用这个字典构建一个图形,所以我正在密切监视内存使用情况.

在我看来,Python将整个3 GB文件加载到内存中,我无法摆脱它.我的代码看起来像这样:

with open(filename) as data:

    accounts = dict()

    for line in data:
        username = line.split()[1]
        IP = line.split()[0]

        try:
            accounts[username].add(IP)
        except KeyError:
            accounts[username] = set()
            accounts[username].add(IP)

print "The accounts will be deleted from memory in 5 seconds"
time.sleep(5)
accounts.clear()

print "The accounts have been deleted from memory"
time.sleep(5)

print "End of script"
Run Code Online (Sandbox Code Playgroud)

最后一行是在那里,以便我可以监视内存使用情况.该脚本在内存中使用超过3 GB的位.清除字典可以释放大约300 MB.当脚本结束时,释放剩余的内存.

我正在使用Ubuntu,我使用"系统监视器"和终端中的"免费"命令监视内存使用情况.

我不明白的是为什么在我清除字典之后Python需要这么多内存.文件是否仍存储在内存中?如果是这样,我怎么能摆脱它呢?我的操作系统没有看到释放内存的问题吗?

编辑:我已经尝试在清除字典后强行执行gc.collect(),但无济于事.

EDIT2:我在Ubuntu 12.04.LTS上运行Python 2.7.3

EDIT3:我意识到我忘了提到一些非常重要的东西.我真正的问题不在于我的操作系统没有"取回"Python使用的内存.后来,Python似乎没有重用那个内存(它只是要求操作系统有更多的内存).

python memory file-io large-files

14
推荐指数
2
解决办法
1万
查看次数

Python正则表达式:将撇号视为文本

我的目标是在文本中找到一个单词.需要注意的是,我需要将撇号视为文本.

让我举个例子来解释一下.假设我正在寻找文中的单词don:don't trust don.我需要匹配don但不是don't.

我从这个正则表达式开始:r'(?:\b)%s(?:\b)' % re.escape("don")但在这里它匹配两次出现don.然后我尝试了r'(?:\b|\w\')%s(?:\b|\'\w)' % re.escape("don"),但没有用.

如何使我的正则表达式将撇号视为文本?

编辑:我没有提到的一些边缘情况:'don并且don'是正确的匹配t'don,don't'don'不是.

python regex

2
推荐指数
1
解决办法
1505
查看次数

标签 统计

python ×2

file-io ×1

large-files ×1

memory ×1

regex ×1