我需要从一个 python
文件馈送 local变量到另一个文件,将变量组合在那里,然后将其他变量恢复到第一个文件中。
我研究了cyclic dependency
和combining local and global variables
的讨论,但似乎并不能解决我的问题。
这是我要完成的骨架示例。
几个python
脚本生成报告。
#report1.py
report_name = "daily_report1"
#report2.py
report_name = "daily_report2"
report_name
是报告名称的变量,需要在包含大多数环境变量和常数的mysettings.py
中采购。
#mySettings.py
save_location= os.getcwd()+ "\" + report_name + "\"
report_file = report_name + "_" +
str(datetime.datetime.today().strftime('%m_%d_%Y')) + ".xlsx"
代码然后查询服务器并获取csv
文件并转换为xlsx
并根据需要进行修改。
回到记者?.py
#report1.py
import mysettings.py
report_name = "daily_report1"
wb = openpyxl.load_workbook(report_file)
#Lots of other code
wb.save(save_location + report_file)
#report2.py
import mysettings.py
report_name = "daily_report2"
wb = openpyxl.load_workbook(report_file)
#Lots of other code
wb.save(save_location + report_file)
挑战是,我如何在report_name
中馈送到mysettings.py
,然后在report1.py和report2.py2.py
工作后,还会添加其他报告,因此我想简化变量/设置。
我还想在所有reports?.py
中声明尽可能少的变量,而是在mysettings.py
任何想法输入都将受到赞赏。
您应该在mysettings.py.py和中emem ecepute 在其他文件中执行
#mysettings.py
def getsettings(report_name):
save_location= os.getcwd()+ "\" + report_name + "\"
report_file = report_name + "_" +
str(datetime.datetime.today().strftime('%m_%d_%Y')) + ".xlsx"
return save_location, report_file
#report1.py
import mysettings.py
report_name = "daily_report1"
save_location, report_file = mysettings.getsettings(report_name)
wb = openpyxl.load_workbook(report_file)
#Lots of other code
wb.save(save_location + report_file)
这样,您不需要在不同脚本上使用全局变量
好的,最海峡的前进方式是在报告模块中执行mysettings.py
中的代码:
report_name = "blah"
with open("mysettings.py","r") as common_code:
exec(f.read(), globals()) #the globals() is actually implied if there is no second argument
print(report_file)
但是,在模块之间传递几个变量通常由environment
字典处理,因此您可以让mysettings.py
具有这样的函数:
def generate_report_file(environ):
report_name = environ["report_name"]
environ["save_location"] = os.getcwd()+ "\" + report_name + "\"
environ["report_file"] = report_name + "_" +
str(datetime.datetime.today().strftime('%m_%d_%Y')) + ".xlsx"
然后在报告文件中您可以手动处理环境:
environ = {}
environ["report_name"] = "blah"
mysettings.generate_report_file(environ)
print(environ["report_file"])
或利用全局名称空间以字典跟踪的事实:
report_name = "blah"
mysettings.generate_report_file(globals())
print(report_file)