鱼C论坛

 找回密码
 立即注册
查看: 3202|回复: 0

[作品展示] 三体论坛

[复制链接]
发表于 2023-2-16 18:05:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 歌者文明清理员 于 2023-2-16 18:11 编辑

玩玩三体论坛
首先,需要将论坛数据保存到二进制文件里,所以使用 pickle 库。
一般我们只使用 dumpload 函数。
dump 函数的一般格式如下
  1. dump(data, file)
  2. data:数据
  3. file:文件(open())
复制代码

load 是从文件中加载数据。参数
  1. load(file)
  2. file:文件(open())
复制代码

如果你去翻 python 官网的说明,你会发现这并不是完整的参数形式,缩水了很多
所以代码如下
  1. from pickle import load, dump
复制代码

自定义 writeInData 函数,它的调用形式为
  1. writeInData(dataType, data, fileName)
  2. dataType:数据类型
  3. data:数据
  4. fileName:文件名
复制代码

函数的定义如下

  1. def writeInData(dataType, data, fileName):
  2.     """
  3.     在文件中写入数据。
  4.     :param dataType: 数据类型
  5.     :param data: 数据
  6.     :param fileName: 文件名
  7.     :return : None
  8.     """
  9.     # 打开文件
  10.     # 如果文件不存在
  11.     try:
  12.         file = open(fileName, 'rb')
  13.         # 源数据,为字典
  14.         originData = load(file)
  15.         file.close()
  16.     except:
  17.         originData = dict()  # 为了和集合区分
  18.     file = open(fileName, 'wb')
  19.     # 怕是空的
  20.     if dataType not in originData:
  21.         originData[dataType] = []
  22.     # 字典的每个值都是列表
  23.     originData[dataType].append(data)
  24.     dump(originData, file)
  25.     file.close()
复制代码

读取回复消息
  1. def readReply(fileName, mode, index):
  2.     """
  3.     读取回复消息
  4.     :param fileName: 文件名
  5.     :param mode: 模式
  6.     :param index: 索引
  7.     :return : 读取的信息
  8.     """
  9.     file = open(fileName, 'rb')
  10.     data = load(file)
  11.     if mode not in data:
  12.         # 我还真是故意的
  13.         raise ValueError('读不出来啊')
  14.     # 回复信息
  15.     replyMessage = data[mode][index]
  16.     return '%s 说:%s' % replyMessage
复制代码

哦对了这是 tools.py
然后

  1. TEST = -1
  2. FILENAME = 'data.dat'
  3. if __name__ == '__main__':
  4.     # (谁, 说了啥)
  5.     writeInData(TEST, ('大史', '面壁者罗辑,我是您的破壁人'), FILENAME)
  6.     print(readReply(FILENAME, TEST, 0))
复制代码

成功!
完整代码如下


  1. from pickle import load, dump

  2. def writeInData(dataType, data, fileName):
  3.     """
  4.     在文件中写入数据。
  5.     :param dataType: 数据类型
  6.     :param data: 数据
  7.     :param fileName: 文件名
  8.     :return : None
  9.     """
  10.     # 打开文件
  11.     # 如果文件不存在
  12.     try:
  13.         file = open(fileName, 'rb')
  14.         # 源数据,为字典
  15.         originData = load(file)
  16.         file.close()
  17.     except:
  18.         originData = dict()  # 为了和集合区分
  19.     file = open(fileName, 'wb')
  20.     # 怕是空的
  21.     if dataType not in originData:
  22.         originData[dataType] = []
  23.     # 字典的每个值都是列表
  24.     originData[dataType].append(data)
  25.     dump(originData, file)
  26.     file.close()


  27. def readReply(fileName, mode, index):
  28.     """
  29.     读取回复消息
  30.     :param fileName: 文件名
  31.     :param mode: 模式
  32.     :param index: 索引
  33.     :return : 读取的信息
  34.     """
  35.     file = open(fileName, 'rb')
  36.     data = load(file)
  37.     if mode not in data:
  38.         # 我还真是故意的
  39.         raise ValueError('读不出来啊')
  40.     # 回复信息
  41.     replyMessage = data[mode][index]
  42.     return '%s 说:%s' % replyMessage


  43. TEST = -1
  44. FILENAME = 'data.dat'
  45. if __name__ == '__main__':
  46.     # (谁, 说了啥)
  47.     writeInData(TEST, ('大史', '面壁者罗辑,我是您的破壁人'), FILENAME)
  48.     print(readReply(FILENAME, TEST, 0))
复制代码


[b]这只是第一期!!![/b]

评分

参与人数 1荣誉 +3 贡献 +3 收起 理由
sfqxx + 3 + 3 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 05:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表