`
yr512656630
  • 浏览: 321085 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

python shelve 本地数据存储

 
阅读更多

一个简单的例子
import sys,shelve
def store_person(db):
   # """
   # Query user for data and store it in the shelf object
   # """
    pid = raw_input('Enter unique ID number: ')
    person = {}
    person['name'] = raw_input('Enter name: ')
    person['age'] = raw_input('Enter age: ')
    person['phone'] = raw_input('Enter phone number: ')
    db[pid] = person
def lookup_person(db):
   # """
   # Query user for ID and desired field,and fetch the corresponding data from
   # the Shelf object
   # """
    pid = raw_input('Enter ID number: ')
    field = raw_input('What would you like to know? (name,age,phone) ')
    field = field.strip().lower()
    print field.capitalize() + ':', \
    db[pid][field]
def print_help():
    print 'The available commands are:'
    print 'store : Stores information about a  person'
    print 'lookup : Looks up aperson from ID number'
    print 'quit : Save changes and exit'
    print '?    : Prints this message'
def enter_command():
    cmd = raw_input('Ener command (? for help): ')
    cmd = cmd.strip().lower()
    return cmd
def main():
    database = shelve.open('c:\\text.data')
    try:
        while True:
           cmd = enter_command()
           if cmd == 'store':
              store_person(database)
           elif cmd == 'lookup':
              lookup_person(database)
           elif cmd == '?':
              print_help()
           elif cmd == 'quit':
              return
    finally:
     database.close()
if __name__ == '__main__': main()





======================================================
c:\\text.data 不要创建,会自动生成
shelve是一个对象持久化保存方法,将对象保存到文件里面,一般来说对象的保存和恢复都是通过shelve来进行的。
你的问题是test.txt已经存在,并且格式与shelve不符,所以提示 "db type could not be determined"
解决方法: 首次运行后会自动生成该文件。
另外,缺省方式数据文件是二进制的,最好不要用txt结尾来误导别人。

关于if __name__ == '__main__': main()解释
模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于您如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下, __name__ 的值将是一个特别缺省"__main__"。

在cmd 中直接运行.py文件,则__name__的值是'__main__';

而在import 一个.py文件后,__name__的值就不是'__main__'了;

从而用if __name__ == '__main__'来判断是否是在直接运行该.py文件

如:

#Test.py

class Test:

    def __init(self):pass

    def f(self):print 'Hello, World!'

if __name__ == '__main__':

    Test().f()

#End



你在cmd中输入:

C:>python Test.py

Hello, World!

说明:"__name__ == '__main__'"是成立的



你再在cmd中输入:

C:>python

>>>import Test

>>>Test.__name__                #Test模块的__name__

'Test'

>>>__name__                       #当前程序的__name__

'__main__'

无论怎样,Test.py中的"__name__ == '__main__'"都不会成立的!

所以,下一行代码永远不会运行到!
  • 大小: 80.6 KB
分享到:
评论

相关推荐

    Python中shelve序列化与反序列化

    shelve是一个简单的数据存储方案,类似key-value数据库,可以很方便的保存python对象,其内部是通过pickle协议来实现数据序列化。shelve只有一个open()函数,这个函数用于打开指定的文件(一个持久的字典),然后...

    ubuntu 下 在线词典 (python 实现)

    例如,可以使用Python的`shelve`或`pickle`库将最近查询过的单词和结果存储到本地文件中,当再次查询相同单词时,先检查本地缓存,如果存在则直接返回,否则再向服务器请求。 此外,为了使应用更加完善,还可以添加...

    python王者荣耀小助手源码

    7. 数据存储:爬取到的信息可能需要保存在本地,以便后续使用。Python提供了多种文件操作方式,如open函数,以及更高级的shelve、pickle模块,用于序列化对象并保存到文件。 8. 异常处理:在爬虫过程中,可能会遇到...

    python标准库

    数据储存部分通常涵盖数据库接口模块,如shelve、dbm、sqlite3等,用于持久化存储数据。 工具和实用程序模块则提供各种辅助功能,包括命令行参数处理、编译执行Python代码、格式化输出、执行外部程序等。 其他模块...

    2014年辛星python标准库整理夏季版

    4. **数据处理与加密存储**:包含dbm模块、shelve模块、pickle模块、csv模块、hashlib模块、hmac模块。这些模块有助于数据的持久化、加密以及处理数据文件。 5. **特殊说明**:这部分讨论了zipfile模块、文件系统...

    python标准库中文版PDF(带章节书签).pdf

    数据存储模块涉及如何在Python中保存和恢复数据结构。 - shelve模块提供了持久化字典对象的存储。 - dbm模块提供了对数据库文件的访问。 ### 工具和实用程序 工具和实用程序模块集包含一些常用的实用工具。 - ...

    python标准库3.7.3.docx

    - **10.4 shelve 模块**:提供了一个简单的键值存储机制。 - **10.5 dbhash 模块**:该模块在Python 3中已被废弃。 - **10.6 dbm 模块**:提供了访问DBM数据库的功能。 - **10.7 dumbdbm 模块**:一个简单的DBM实现...

    Python库 | pysimplecache-0.0.1-py2-none-any.whl

    它基于Python的标准库`pickle`来序列化和反序列化数据,以适应多种类型的数据存储。`pickle`库允许将Python对象转化为字节流,便于存储和恢复。此外,pysimplecache可能利用了Python的`shelve`库或`dbm`库作为底层...

    Phthon3标准库——The Python 3 Standard Library by Example

    3. **文件和I/O模块**:`io`模块提供了面向对象的输入输出接口,`csv`处理CSV文件,`json`用于JSON数据编码和解码,`pickle`和`shelve`则用于对象序列化和持久化存储。 4. **字符串处理**:`string`模块包含了各种...

    PHP Shelve-开源

    在Python中,shelve模块提供了一种简单的方法来存储和检索Python对象,这些对象可以是任何可序列化的数据类型。而PHP Shelve则为PHP开发者提供了类似的功能,允许他们将PHP对象持久化到磁盘,以便在后续的程序运行中...

    《Python Standard Library》学习笔记(原书为 Python2.X 版,在学习的过程中,用 Py.zip

    8. **数据库接口**:`sqlite3`模块提供SQLite数据库支持,`dbm`和`shelve`模块实现了简单的键值对存储,`psycopg2`(非标准库,但常用)提供了PostgreSQL数据库接口。 9. **加密和安全**:`hashlib`模块提供了各种...

    《Python标准库》中文版

    ### 关于《Python标准库》中文版 #### 一、核心模块 《Python标准库》中文版主要介绍了Python编程语言中的基本标准库,这些库在编写Python程序时极为常用。...这些模块为Python开发者提供了灵活的数据存储解决方案。

    Shelve Database Engine-开源

    这使得它成为在嵌入式设备、移动应用或者简单的本地数据存储场景下的理想选择。 开源软件的属性让ShelveDB具备了社区支持和持续改进的潜力。开发者可以根据自己的需求对源代码进行修改,或者为项目贡献新功能,共同...

    GSbotv3:该机器人的第三版,在本地存储信任

    本地存储是指数据存储在用户的设备上,而不是远程服务器。这种存储方式的优点包括数据访问速度更快、隐私保护更强,因为数据不依赖于网络连接,也不会被第三方服务器访问。对于GSbotv3而言,本地存储的信任数据可能...

    EDSM-API:用于解析EDSM数据的简单Python脚本-由CMDR Urania Minora提供

    这可能涉及到 Python 的文件操作或者使用第三方库如 pickle 或 shelve 来存储和读取数据。 通过深入学习和理解这个 EDSM-API 脚本,用户不仅可以学会如何与 EDSM API 交互,还能提升 Python 编程技能,尤其是网络...

    Python模块相关知识点小结

    - `shelve`:提供了简单的键值存储,可以持久化Python对象,支持`pickle`能序列化的所有类型。 - `hashlib`:用于加密,如`md5()`函数可以对字符串进行MD5哈希加密。 在实际编程中,了解和熟练使用这些模块可以显著...

    local-info:显示从多个服务收集的有关本地有用信息的信息,例如下一班车时间

    6. **缓存机制**:为了提高效率,`local_info` 可能使用了缓存策略,如`pickle` 或 `shelve` 模块来存储最近获取的信息,避免频繁的网络请求。 7. **模块组织**:`local-info-master` 可能包括多个子模块,每个模块...

    password_manager-johnson:GitHub Classroom创建的password_manager-johnson

    Python的`pickle`库可以序列化和反序列化Python对象,便于存储,而`shelve`库提供了一种键值对的持久化存储方式。 10. **安全实践**:在处理敏感信息时,开发者应遵循最佳安全实践,如不保存明文密码、使用HTTPS...

Global site tag (gtag.js) - Google Analytics