簡體   English   中英

保存文件的最佳做法-python pickle用例

[英]Best Practices for Save Files - a python pickle use case

我不是一名程序員,他從事簡單的python編程,以實現工作中與GIS相關的任務的自動化。 但是,我發現我真的很喜歡它,並且在工作之外“擴展”了我的技能。

我目前正在使用Pickle模塊保存類實例,並意識到我有一些用於保存數據的結構選項。 我的問題是哪個選項是“更好”或更“可接受/最佳實踐”的選項,或者是否有更好的選擇。

我將使用“ playstation式”示例,僅用於踢球:

有多個用戶。 每個用戶都有一組特定游戲的獎杯。 每個用戶可能還具有一個特定游戲的多個玩家配置文件,並且這些角色中的每個角色都可以具有多個保存的游戲玩法實例。

因此,當某人登錄時,他們從保存的用戶對象列表中選擇自己是哪個用戶(或創建一個新的對象-但現在我將忽略創建新方案)。 根據您以哪個用戶身份登錄,可以從保存文件以及與該用戶關聯的任何播放器配置文件中加載適當的Trophys對象。 當用戶加載已保存的游戲時,他們會選擇適當的玩家資料,並列出與該角色相關的已保存游戲信息。 用戶將選擇他們想要的保存,然后將加載游戲數據。

我看到的方式有幾種選擇:

1)根據類別分離保存文件。 例如:

A) "users" - this could contain a list of the User() objects
B) "<username>_trophies" - this could contain a list of the Trophy() objects assotiated with the user indicated in the filename
C) "<username>_characters" - this could contain a list of the Player() objects assotiated with the user indicated in the filename
D) "<username>_<charactername>_save<#>" - this could contain a save of the game info (probably as a dictionary with various info) assotiated with the username and charactername indicated in the filename

通過此設置,可以根據需要取消對每個文件進行剔除,因此,如果用戶從未選擇查看其獎杯,則永遠不必加載獎杯信息。

但是,我想知道這是否將它分解得太多並創建了太多文件。 使用此選項會更好嗎?:

2)擁有一個全面的保存文件,所有信息均以字典形式保存。 例如:

{User:[[Trophy,Trophy,Trophy], {Character: [(game info),
                                            (game info),
                                            (game info)];
                                Character:  [(game info),
                                            (game info),
                                            (game info)]}];
 User:[[Trophy,Trophy,Trophy], {Character: [(game info),
                                            (game info),
                                            (game info)];
                                Character:  [(game info),
                                             (game info),
                                             (game info)]}]}

那么,哪個更好? 可以嗎? 都不是?

感謝您提供的所有幫助/意見!

關於保存各種信息的關鍵之一是一致性。 除非您有大量數據,否則文件系統的性能通常不是問題,因為文件系統緩存意味着您很少在磁盤本身上等待。

我認為在這種應用程序中拆分數據不會有任何好處,而且它們“不同步”的機會很高。 我強烈建議您將內容放在一個文件中。

至於“更好的選項”選項,我建議查看sqlite3模塊( http://docs.python.org/2/library/sqlite3.html)-許多應用程序(來自時間跟蹤器,請注意使用者等到網絡瀏覽器)使用sqlite數據庫來存儲其配置,其中最重要的事情就是只有一個包含數據的文件,該文件可以輕松地移動,備份等(需要注意的是,使用時不應移動/備份!)

您可能還需要查看json模塊,該模塊與pickle模塊具有類似的接口(加載/加載/轉儲/轉儲),但是它寫入的文件在很大程度上是人類可讀和可修改的。 缺點是只能存儲基本類型(字符串,布爾值,數字)以及這些簡單類型的列表和字典。

如果當時只有一個用戶,那么您可以將所有內容放入一個文件中。 這將是最容易實現的選擇。

當用戶數量增長時,您會發現從多個進程更改單個文件將不起作用。 有兩個進程讀取文件,然后在內存中進行更改,然后寫回磁盤。 僅保留最后保存的更改。 因此,您自然可以將數據拆分為不同的文件。

但是,對於每個用戶實現,文件也會再次發生相同的問題。 然后,您應該研究其他類型的存儲,例如數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM