鱼C论坛

 找回密码
 立即注册
查看: 2307|回复: 2

[已解决]pickle问题

[复制链接]
发表于 2023-3-30 20:09:40 | 显示全部楼层 |阅读模式

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

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

x
最近听到小甲鱼的python入门之"腌制的泡菜"这一课,pickle
正好有些数据要处理,将文本文件打包成了pkl文件后续调用,先需要获取pkl文件冒号前后的数据要去遍历做些事请
原文本的txt文件内容类似如下如下
aa:bb
cc:dd
ee:ff
代码如下
  1. import pickle

  2. def pack_data(files):
  3.     file = files + '.txt'
  4.     # 读取txt文件中的数据
  5.     with open(file, 'r') as f:
  6.         data = f.read()
  7.     # 使用pickle序列化txt文件并保存到pkl文件中
  8.     with open(file + '.pkl', 'wb') as f:
  9.         pickle.dump(data, f)
  10.    
  11.     # 从文件中读取序列化的字典对象并反序列化
  12.     with open(file + '.pkl', 'rb') as f:
  13.         loaded_data = pickle.load(f)
  14.    
  15.     # 打印序列化后的对象
  16.     print(loaded_data)
  17.     #
  18.     print("打印value")
  19.     # 遍历数据并切分
  20.     for item in loaded_data:
  21.         parts = item.split(':')
  22.         key = parts[0]
  23.         value = parts[1]
  24.    
  25.         print("Key: {key}", "Value: {value}")

  26. #AQ数据包
  27. #pack_data('aq_data')
  28. #PQ数据包
  29. pack_data('pq_data')
  30. #eep数据包
  31. #pack_data('eep_data')
  32. #board数据包
  33. #pack_data('board_data')
  34. #customer数据包
  35. #pack_data('customer_data')
  36. #factory根目录数据包,例如factory_机芯_机型
  37. #pack_data('factoryroot_data')
复制代码


报错信息如下
  1.   File "proc_init_data.py", line 25, in pack_data
  2.     value = parts[1]
  3. IndexError: list index out of range
复制代码
最佳答案
2023-3-30 20:13:36
在遍历loaded_data时,得到的实际上是一个字符串,而不是一个列表。因此,需要使用splitlines()方法将字符串按行切分成一个列表,然后再遍历列表并切分出key和value。另外,在打印key和value时,应该使用format语法而不是字符串拼接。修改后的代码如下:
  1. import pickle
  2. def pack_data(files):
  3.     file = files + '.txt'
  4.     # 读取txt文件中的数据
  5.     with open(file, 'r') as f:
  6.         data = f.read()
  7.     # 使用pickle序列化txt文件并保存到pkl文件中
  8.     with open(file + '.pkl', 'wb') as f:
  9.         pickle.dump(data, f)
  10.    
  11.     # 从文件中读取序列化的字典对象并反序列化
  12.     with open(file + '.pkl', 'rb') as f:
  13.         loaded_data = pickle.load(f)
  14.    
  15.     # 打印序列化后的对象
  16.     print(loaded_data)
  17.    
  18.     print("打印value")
  19.     # 切分对象并打印key和value
  20.     lines = loaded_data.splitlines()
  21.     for line in lines:
  22.         parts = line.split(':')
  23.         key = parts[0]
  24.         value = parts[1]
  25.         print("Key: {}, Value: {}".format(key, value))
  26. #AQ数据包
  27. #pack_data('aq_data')
  28. #PQ数据包
  29. pack_data('pq_data')
  30. #eep数据包
  31. #pack_data('eep_data')
  32. #board数据包
  33. #pack_data('board_data')
  34. #customer数据包
  35. #pack_data('customer_data')
  36. #factory根目录数据包,例如factory_机芯_机型
  37. #pack_data('factoryroot_data')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-30 20:13:36 | 显示全部楼层    本楼为最佳答案   
在遍历loaded_data时,得到的实际上是一个字符串,而不是一个列表。因此,需要使用splitlines()方法将字符串按行切分成一个列表,然后再遍历列表并切分出key和value。另外,在打印key和value时,应该使用format语法而不是字符串拼接。修改后的代码如下:
  1. import pickle
  2. def pack_data(files):
  3.     file = files + '.txt'
  4.     # 读取txt文件中的数据
  5.     with open(file, 'r') as f:
  6.         data = f.read()
  7.     # 使用pickle序列化txt文件并保存到pkl文件中
  8.     with open(file + '.pkl', 'wb') as f:
  9.         pickle.dump(data, f)
  10.    
  11.     # 从文件中读取序列化的字典对象并反序列化
  12.     with open(file + '.pkl', 'rb') as f:
  13.         loaded_data = pickle.load(f)
  14.    
  15.     # 打印序列化后的对象
  16.     print(loaded_data)
  17.    
  18.     print("打印value")
  19.     # 切分对象并打印key和value
  20.     lines = loaded_data.splitlines()
  21.     for line in lines:
  22.         parts = line.split(':')
  23.         key = parts[0]
  24.         value = parts[1]
  25.         print("Key: {}, Value: {}".format(key, value))
  26. #AQ数据包
  27. #pack_data('aq_data')
  28. #PQ数据包
  29. pack_data('pq_data')
  30. #eep数据包
  31. #pack_data('eep_data')
  32. #board数据包
  33. #pack_data('board_data')
  34. #customer数据包
  35. #pack_data('customer_data')
  36. #factory根目录数据包,例如factory_机芯_机型
  37. #pack_data('factoryroot_data')
复制代码

点评

受教了  发表于 2023-3-30 20:16
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 18:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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