【问题标题】:Calculating python variable only once只计算一次python变量
【发布时间】:2015-04-08 08:59:04
【问题描述】:

我想在我的脚本 extractor.py 中提取一个 excel 文件并将其导入我的脚本calculation.py 但不重新计算它!

这是我的代码:

在extractor.py中

current_directory=os.getcwd()
workbook_clients=pandas.ExcelFile(current_directory+"/Documents/clients.xlsx")      
clients=pandas.io.excel.ExcelFile.parse(workbook_clients)

在计算.py中

from extractor import * 
print clients  

现在我运行calculation.py需要30秒,我不明白为什么,我只想在内存中调用一个变量......

【问题讨论】:

  • 您的 excel 文件有多大?你展示的是 extractor.py 中的所有内容吗?

标签: python variables memory import


【解决方案1】:

好的,我终于找到了另一种方法来做我想做的事:

在extractor.py中

current_directory=os.getcwd()
workbook_clients=pandas.ExcelFile(current_directory+"/Documents/clients.xlsx")
global clients 
clients=pandas.io.excel.ExcelFile.parse(workbook_clients)

在计算.py中

print clients 

【讨论】:

  • 不错!感谢分享。
【解决方案2】:

如果您的数据集非常大,read_csv 应该比read_excel 快​​很多。 (Source)

在你的 cmets 之后编辑:如果你想确保在你的例程中使用提取器只获取一次值,请编写一个方法

import os
import pandas as pd

def get_data():
    current_directory=os.getcwd()
    workbook_clients=pd.ExcelFile(current_directory+"/Documents/clients.xlsx")      
    data=pd.io.excel.ExcelFile.parse(workbook_clients)
    return data

clients = get_data()
print(clients)

现在你可以用clients 做任何你想做的事,它是从内存中调用的。如果您想重新读取数据,只需再次调用该方法即可。

显然,您也可以在 extractor.py 中编写方法并从其他地方调用它。

顺便说一句:from module import *你不应该这样做列表中。 Further reading. :)

【讨论】:

  • extractor.py 中没有其他内容...例如,当我注释掉“from extractor import *”时,我会立即得到答案,因为 python 正在内存中寻找“clients”变量...但是感觉这个评论/取消评论的解决方案不是最好的。我尝试了read_csv,它有点快,但这里的问题实际上只是读取excel文件一次然后重用变量
  • 好的,但我认为从内存中读取数据不是您想要的。您可以将 xlsx 转换为 csv 吗?您可以通过 save as 在 Excel 中进行操作...您的数据集有多大?
  • 谢谢克拉斯特!更准确地说,我希望能够决定是否从内存中读取数据......如果我不清楚,请打扰我。我知道有一种方法可以通过转换格式来优化数据集的读取,但这不是我在这里寻找的。例如,在 Excel 中,可以决定是复制/粘贴公式还是仅复制/粘贴单元格的值。在这里我想了解我的变量何时被重新评估或只是在内存中调用
  • 谢谢克拉斯特!只要我有足够的声誉,我就会投票给你的答案(显然很长一段时间......)
  • 现在,您可以简单地将其标记为已解决(左侧的绿色勾号)。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多