我正在运行一个从其他客户机接收数据的程序,在编写和更改文件中的信息时遇到了大量的问题,我觉得我什么都试过了。我想保存信息,以防程序因某种原因停止,这样数据就可以保存了。我觉得我什么都试过了,用file.flush
,用os.fsync()
,我试过用with open(file) as file:
语句在程序停止时关闭文件,现在,我试着退出,让函数在文件关闭时写入文件,但还没有成功,加上没有调用错误,所以有点不相关。我正在寻找一种方法来写入文件,重复,以及,嗯,工作。我可能不明白什么,所以请给我解释一下。我一直有麻烦,需要帮助。你知道吗
EDIT
AccData = {}
client = discord.Client()
User = discord.User
def SaveData():
pickle.dump(AccData,data)
data.close()
print("data saved")
atexit.register(SaveData)
f = open('DisCoin.json','rb')
AccData = pickle.load(open('DisCoin.json','rb'))
f.seek(0)
f.close()
data = open('DisCoin.json','wb')
Python捕获自己的异常、大多数信号和exit(),然后运行
atexit
例程进行清理。所以,你可以在那里处理正常的坏习惯。你知道吗但也有其他不好的事情发生。分段错误或其它内部错误。未知信号。调用
os._exit()
的代码。这将导致提前终止,并且尚未刷新的数据将丢失。任何程序都可能发生不好的事情,如果它们需要额外的恢复能力,它们需要一些方法来处理。你知道吗您可以将内容写入临时文件,并仅在完成后将其重命名为“活动”文件。如果程序终止,至少它最后保存的数据仍然存在。
您可以编写更改日志或日志,并通过扫描该日志来重建所需的数据。这就是许多文件系统的工作原理,“大数据”将系统映射/简化为基本相同的东西。
您可以移动到数据库并使用它的事务处理或任何OLPT系统来确保您对数据存储进行全部或全部更新。
您的示例代码特别脆弱,因为
清除磁盘上的现有数据。用这个密码是不可能回去的!那么,第一步就是不要那样做。保留旧数据,直到新数据准备好。你知道吗
下面是一个为您管理临时文件的示例类。使用它而不是
open
,它将创建一个临时文件供您更新,并且只使用with
子句的数据运行,没有异常。如果在with
子句中使用atexit处理程序,则不需要它。你知道吗我个人喜欢通过为它定义一个打印函数来实现这一点。你知道吗
上面的代码将“Hello”写入文件'输出.txt'在C:\mypath,保存它,然后在输入一些信息后,会写'这里也是!!'进入文件。如果在脚本等待输入时检查该文件,它应该已经包含“Hello”。你知道吗
相关问题 更多 >
编程相关推荐