在web.py中如何打开和关闭文件

2024-04-25 21:35:45 发布

您现在位置:Python中文网/ 问答频道 /正文

当我终止程序并意识到它从未正确关闭时,一个数据文件被破坏。你知道吗

它不被破坏是非常关键的。所以我添加了一个语句来关闭文件。你知道吗

现在,文件似乎打开了两次,然后又关闭了。一次手术太多了。当然,中间有许多读写操作,但它应该只打开和关闭文件一次。你知道吗

下面是我对standarizeweb.py模板所做的操作:

import web
import pandas as pd

store = pd.HDFStore('data_file.h5')

urls = (
    '/', 'index'
)

class index:
    def __init__(self):
        self.__df = store['df']
    def GET(self):
        # several read-write, and modify operations on self.__df
        return "Hello, world!"

if __name__ == "__main__":
    try:
        app = web.application(urls, globals())
        app.run()
    finally:
        store.close()

现在,如果我将打开存储的行移到底部的try语句中,它会抱怨,因为它编译了类,但找不到变量store。你知道吗

我试着用顶部的None初始化store,但也没用。然后我试着把这个行放在函数的顶部,然后从底部调用它,但是,这并没有把它纳入范围。你知道吗

我在考虑把它变成一个global变量,这可能会起作用,这是正确的方法吗?你知道吗


Tags: 文件storeimportself程序webappdf
1条回答
网友
1楼 · 发布于 2024-04-25 21:35:45

web.py running twice。如前所述,避免使用globals,因为它们不会做你认为它们会做的事情。。。应用程序类型运行两次,一次在启动时运行,另一次在web.appplication(urls, globals())内运行。如果将autoreload=False设置为web应用程序()调用,它不会加载文件两次。你知道吗

另一种解决方案是将store连接到web.config,这是全局可用的。你知道吗

if __name__ == "__main__":
    try:
        web.config.store = pd.HDFStore('data_file.h5')
        app = web.application(urls, globals())
        app.run()
    finally:
        web.config.store.close()

…并在__init__中引用该全局

class index:
    def __init__(self):
        self.__df = web.config.store['df']

相关问题 更多 >