题目描述
把从txt中提取出来的数据定义成五元组为:(姓名,班别,科目,分数,单位),存成list列表
TXT中的数据:小明:A001班,语文,50分
小红:B002班,数学,100分
小美:A001班,英语,80分
小马:C003班,数学,20分
题目来源及自己的思路
现在已经使用re.split以符号‘,’ ‘:’进行分割,得到了四个元素,但不太清除最后一个XX分该如何分割成 XX 分
有好心的大佬可以顺手指导一下怎么解决输出的信息是unicode码 例:('xefxbbxbfxe5xb0x8fxe6x98x8e', 'A001xe7x8fxad', 'xe8xafxadxe6x96x87', '50xe5x88x86n') 正确应是:(‘小明’, ‘A001班’, ‘语文’, ‘50’, ‘分’)的问题
感激不尽
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
--coding:utf-8--
import re
filename = file(r"D:PyCharm01data.txt",'r')
content = []
for line in filename.readlines():
print line
people = tuple(re.split(r',|:',line,))
content.append(people)
print content
你期待的结果是什么?实际看到的错误信息又是什么?
目前的结果是:print content[0]
输出:('xefxbbxbfxe5xb0x8fxe6x98x8e', 'A001xe7x8fxad', 'xe8xafxadxe6x96x87', '50xe5x88x86n')
正确的结果应该是:print content[0]
(‘小明’, ‘A001班’, ‘语文’, ‘50’, ‘分’)
关于提取
只是换一下思路,如果单位都是'分'的话,为何不考虑在提取的正则里加上"分"这个词? 例如
如果后面单位不太一样的话也有其他方法,不过会麻烦一点。比如提取后面的50X,先正则把数字给extract出来,然后非数字部分也extract出来。用两个不同的group存起来,在放到tuple里。
关于编码
还是尽量切到
python3
会好一点。加# -*- coding: utf-8 -*-
在文件头部就可以解决这个问题。python2的话,你不能直接print
这个元组,而是必须循环这个元组的每个元素(也就是字符串“再print
才会显示中文。比如输出
如果觉得换行太丑,输出不方便,也可以自己写一个打印函数