|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
最近听到小甲鱼的python入门之"腌制的泡菜"这一课,pickle
正好有些数据要处理,将文本文件打包成了pkl文件后续调用,先需要获取pkl文件冒号前后的数据要去遍历做些事请
原文本的txt文件内容类似如下如下
aa:bb
cc:dd
ee:ff
代码如下
- import pickle
- def pack_data(files):
- file = files + '.txt'
- # 读取txt文件中的数据
- with open(file, 'r') as f:
- data = f.read()
- # 使用pickle序列化txt文件并保存到pkl文件中
- with open(file + '.pkl', 'wb') as f:
- pickle.dump(data, f)
-
- # 从文件中读取序列化的字典对象并反序列化
- with open(file + '.pkl', 'rb') as f:
- loaded_data = pickle.load(f)
-
- # 打印序列化后的对象
- print(loaded_data)
- #
- print("打印value")
- # 遍历数据并切分
- for item in loaded_data:
- parts = item.split(':')
- key = parts[0]
- value = parts[1]
-
- print("Key: {key}", "Value: {value}")
- #AQ数据包
- #pack_data('aq_data')
- #PQ数据包
- pack_data('pq_data')
- #eep数据包
- #pack_data('eep_data')
- #board数据包
- #pack_data('board_data')
- #customer数据包
- #pack_data('customer_data')
- #factory根目录数据包,例如factory_机芯_机型
- #pack_data('factoryroot_data')
复制代码
报错信息如下
- File "proc_init_data.py", line 25, in pack_data
- value = parts[1]
- IndexError: list index out of range
复制代码
在遍历loaded_data时,得到的实际上是一个字符串,而不是一个列表。因此,需要使用splitlines()方法将字符串按行切分成一个列表,然后再遍历列表并切分出key和value。另外,在打印key和value时,应该使用format语法而不是字符串拼接。修改后的代码如下:
- import pickle
- def pack_data(files):
- file = files + '.txt'
- # 读取txt文件中的数据
- with open(file, 'r') as f:
- data = f.read()
- # 使用pickle序列化txt文件并保存到pkl文件中
- with open(file + '.pkl', 'wb') as f:
- pickle.dump(data, f)
-
- # 从文件中读取序列化的字典对象并反序列化
- with open(file + '.pkl', 'rb') as f:
- loaded_data = pickle.load(f)
-
- # 打印序列化后的对象
- print(loaded_data)
-
- print("打印value")
- # 切分对象并打印key和value
- lines = loaded_data.splitlines()
- for line in lines:
- parts = line.split(':')
- key = parts[0]
- value = parts[1]
- print("Key: {}, Value: {}".format(key, value))
- #AQ数据包
- #pack_data('aq_data')
- #PQ数据包
- pack_data('pq_data')
- #eep数据包
- #pack_data('eep_data')
- #board数据包
- #pack_data('board_data')
- #customer数据包
- #pack_data('customer_data')
- #factory根目录数据包,例如factory_机芯_机型
- #pack_data('factoryroot_data')
复制代码
|
|