Python中如何分割元组中的数字与字符

题目描述

把从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’, ‘分’)
阅读 5.6k
2 个回答

关于提取

只是换一下思路,如果单位都是'分'的话,为何不考虑在提取的正则里加上"分"这个词? 例如

line = "小红:B002班,数学,100分"
people = re.split(r'[,|:分]',line)
# 得到[' 小红', 'B002班', '数学', '100', '']
people[-1] = "分"
# 得到[' 小红', 'B002班', '数学', '100', '分']
# 最后当然可以转换成tuple
people = tuple(people)

如果后面单位不太一样的话也有其他方法,不过会麻烦一点。比如提取后面的50X,先正则把数字给extract出来,然后非数字部分也extract出来。用两个不同的group存起来,在放到tuple里。

关于编码

还是尽量切到python3会好一点。加# -*- coding: utf-8 -*-在文件头部就可以解决这个问题。python2的话,你不能直接print这个元组,而是必须循环这个元组的每个元素(也就是字符串“再print才会显示中文。比如

for i in people:
    print i

输出

小红
B002班
数学
100
分

如果觉得换行太丑,输出不方便,也可以自己写一个打印函数

def pretty_print(slist):
   for i in slist:
       # 注意这个逗号不要漏了
       print i,

# 然后再打印
pretty_print(people)

我用python3 写出来是这样的,加了个encoding=utf-8

import re
content = []
with open('D:PyCharm01data.txt', 'r', encoding='utf-8') as f:
    for line in f.readlines():
        people = tuple(re.split(r',|:',line,))
        content.append(people)
print(content[0])

结果是这样的

("'小红", 'B002班', '数学', "100分'")
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题