写得很精彩,娓娓道来
https://blog.csdn.net/swordtraveller/article/details/90715061

[问题背景]

处理以下文本文件:

grade.txt

ANSI编码格式,共三条数据,每条数据的第一项是姓名,第二项是语文,第三项是数学,第四项是英语

张三,128,136,112
李四,99,106,73
王五,102,148,88

要求将文件改造成适合scikitlearn下KMeans聚类方法处理的形式(生成两个列表,一个是学生姓名,一个是学生成绩)

并计算出每个学生的总分。

[问题分析]

这里的核心是做数据预处理工作,需要把.txt文件处理成Python能处理的格式,例如列表

首先编写一个函数loadData,传参是文件路径filePath,返回两个列表,一个是学生姓名retName,一个是学生成绩retGrade。

def loadPath(fileName):

然后用open函数(可读可写r+模式)打开filePath路径的文件,用文件对象fr承接open()的返回值。

fr = open(filePath, 'r+')

接下来调用fr对象的readlines()方法函数将文件逐行读取,每行存入列表后返回,返回的列表我们用一个列表lines接收。这里每一行都是字符串形式。

lines = fr.readlines()

这时lines列表是这样的:

['张三,128,136,112\n', '李四,99,106,73\n', '王五,102,148,88']

接下来我们生成两个列表retName和retData,一开始它们都是空列表

用retName记录学生姓名,用retData记录分数

retName = []
retData = []

然后用for循环对lines列表的每一个元素进行数据提取的操作:

for line in lines:

例如第一个line就是 ‘张三,128,136,112\n’

第二个line是 ‘李四,99,106,73\n’

第三个line是 ‘王五,102,148,88’

我们发现对于 ‘张三,128,136,112\n’ 和 ‘李四,99,106,73\n’ 都有\n这样的换行符,而line本身是字符串,我们可以用字符串的strip()方法,这个方法设计用于返回被删去开头和结尾的空格或换行符的行字符串。

把上述for循环改写为这样:

for line in lines:line.strip()

注意line是临时变量,line字符串已经没有换行符\n了,但是lines里的每个元素并没有变。

各个line字符串分别是:

‘张三,128,136,112’
‘李四,99,106,73’
‘王五,102,148,88’

接着我们就可以用字符串的split()函数将字符串进行分割,其中split()的传参用’,’ 表示按英文逗号分隔,返回存放各个项的列表,我们用item来承接,for循环改写为如下:

for line in lines:items = line.strip().split(',')

每个items列表依次是:

[‘张三’, ‘128’, ‘136’, ‘112’]
[‘李四’, ‘99’, ‘106’, ‘73’]
[‘王五’, ‘102’, ‘148’, ‘88’]

然后我们就可以把每个items的第一项(姓名)用列表的append()方法追加到retName列表,把每个items的其余项追加到retData列表。其中要注意的是retData里的数据应该是数值型的,具体说是浮点型以用于计算,而这里items每一项却都是字符串型的,所以要先经过强制转换成float的过程。

retData里有三个列表,分别对应三个学生,因此每次循环都要append()一个列表,写成append([…])的形式。

[…]中写 float(item[i]) 并在后面补充说明 for i in range(1, len(items))

for循环改写为如下:

for line in lines:items = line.strip().split(',')retName.append(items[0])retData.append([float(items[i]) for i in range(1, len(items))])
return retName, retData

之后的 retName 为 [‘张三’, ‘李四’, ‘王五’]

retData 为 [[128.0, 136.0, 112.0], [99.0, 106.0, 73.0], [102.0, 148.0, 88.0]]

然后返回两个列表retName和retData,完整的函数loadData定义如下:

def loadData(filePath):fr = open('grade.txt')lines = fr.readlines()retName = []retData = []for line in lines:items = line.strip().split(',')retName.append(items[0])retData.append([float(items[i]) for i in range(1, len(items))])return retName, retData

到此我们的loadData()函数就能将.txt文本文件改造成适合scikitlearn下KMeans聚类方法处理的形式了。

最后再写一下计算平均分的过程,相当于把loadData()返回的列表用于实际应用:

def loadData(filePath):fr = open('grade.txt')lines = fr.readlines()retName = []retData = []for line in lines:items = line.strip().split(',')retName.append(items[0])retData.append([float(items[i]) for i in range(1, len(items))])return retName, retDataif __name__ == '__main__':Names, Grades = loadData('grade.txt')for i in range(len(Names)):print(Names[i], '的平均分是 %.2f' % (sum(Grades[i])/3))

其中if name == ‘main’:的背景是 在cmd中直接运行.py文件时,则__name__的值是’main’,这是便于在cmd中调用.py文件

注:grade.txt需要以ANSI编码格式保存在与.py文件同一目录下。

可以直接运行.py,也可以通过cmd运行,cmd命令是:(假设grade.txt和grade.py都存放在E盘下:)

E:
grade.py

就可以看到运行结果了。

张三 的平均分是 125.33
李四 的平均分是 92.67
王五 的平均分是 112.67

本文参考了礼欣、嵩天老师课程关于 31省市居民家庭消费调查 的代码。

[拓展延伸]

处理以下股票信息,文件名为stock.txt,ANSI编码,并用matplotlib在IDLE中显示图像:(不用cmd,因为涉及到了matplotlib库)

Monday,3368,3389
Tuesday,3381,3391
Wednesday,3388,3402
Thursday,3391,3411
Friday,3405,3446
Saturday,3431,3429
Sunday,3428,3447

每行第一项是日期,第二项是开盘价,第三项是收盘价。

效果图:

import matplotlib.pyplot as pltdef loadData(filePath):fr = open(filePath, 'r+')lines = fr.readlines()Date = []Begin = []End = []for line in lines:items = line.strip().split(',')Date.append(items[0])Begin.append(float(items[1]))End.append(float(items[2]))return Date, Begin, Endif __name__ == '__main__':Date, Begin, End = loadData('stock.txt')plt.title('Stock')plt.xlabel('date')plt.ylabel('price')plt.plot(Date, Begin)plt.plot(Date, End)plt.show()

提示:新手常犯的错误之一是忘记将items[1]和items[2]由字符串类型强转成float类型。

否则,plot()将会把字符串一字排开,而非按照浮点数大小描绘轴线。

错误效果:

这里的3368 ~ 3428, 3389 ~ 3447就是按照.txt内的顺序原封不动依次排开的,因为它们都是字符串。这样的图显然不是我们想要的。

【转载】[Python数据处理] 怎样用Python预处理txt文档提取数据相关推荐

  1. Python借助jieba包对中文txt文档去停用词、分词

    Python借助jieba包对中文txt文档去停用词.分词` import jieba# 创建停用词list def stopwordslist(filepath):stopwords = [line ...

  2. python逐行读取txt写入excel_用python从符合一定格式的txt文档中逐行读取数据并按一定规则写入excel(openpyxl支持Excel 2007 .xlsx格式)...

    前几天接到一个任务,从gerrit上通过ssh命令获取一些commit相关的数据到文本文档中,随后将这些数据存入Excel中.数据格式如下图所示 观察上图可知,存在文本文档中的数据符合一定的格式,通过 ...

  3. 录音文件/音频实现mp3等文件语音转换文字txt文档提取文字精准高效识别

    音频录音文件实现语音转换识别文字最后文档输出结果 实现对mp3等录音文件进行语音识别成文字,最终获取文档格式或者其它定义格式文件,也可以进行提取数据处理逻辑,轻松实现大文件的语音文字转换功能,精准高效 ...

  4. linux文本文件导入数据库,Linux系统下如何将txt文档导入到数据库mysql的方法教程...

    前段时间做小项目的时候遇到了一个需求:把txt文档的数据导入到mysql数据库中,开始本来想直接用Mysql Workbench导入TXT文件,但是最后发现不支持TXT导入,结果我吧嗒吧嗒的去把TXT ...

  5. matlab通过变量调用txt文件路径,MATLAB使用load函数读取txt文档

    MATLAB在数据处理方面应用非常广泛.在众多的专业领域里,把各种手段获取的数据存入txt文档中非常常见.如果txt文件中数据为矩阵形式,通常可以采用简单的load命令来读取数据,然后在MATLAB中 ...

  6. 如何用TXT文档数据批量生成条形码

    我们在制作商品标签的时候,经常需要根据已有的条码数据来批量生成条形码.这些条码数据一般存储在TXT文档.excel表或者是其他类型数据库中,具体怎么操作呢?我们就以TXT文档做实例,和大家分享一下如何 ...

  7. 怎么退出python命令行cd找到txt文档_《python怎么读取txt文件》

    python怎么创建一个txt文件 python怎么创建txt文件的方法. 如下参考: 1.首用内置的空闲编辑器编辑(单击并选择copy),如下图所示. 2.您可以下载记事本和其他编辑软件,以支持多种 ...

  8. 如何用python创建文件_怎么用python建立一个txt文档,并输入内容-百度经验

    这里,我要用python,在电脑桌面上,新建一个文件夹a,并在文件夹a里面,建立一个txt文档--b.txt,写上如下文字: 你好, 世界. 工具/原料 电脑 python 方法/步骤 1 在电脑桌面 ...

  9. python处理图片文件_python 学习(二)处理图片、TXT文档

    一.尝试实现场景:将一个txt文档内容读到程序的数组内 1.新建一个文档 array.txt,写入内容 ,如: 2.使用命令行读取: 1)在上述新建文档位置相同目录下打开命令提示窗 2)打开文件,读入 ...

最新文章

  1. android7.1.1大小,浅谈Android7.1.1 for 360 N5
  2. Linux桌面版横评:三、Fedora 7 Live
  3. html中调用flex中的函数
  4. 图像像素灰度内插(Matlab实现)
  5. Java DCL 单例模式真的需要对变量加 Volatile 吗?
  6. oracle导数的数据乱码,Oracle10g导数据时中文乱码相关处理
  7. Spring MVC Boot Cloud 技术教程汇总(长期更新)
  8. 分布式系统以及CAP原理
  9. VMware12部署windows xp虚拟机
  10. XML1_XML基础
  11. nlp-paper: 按主题分类的自然语言处理文献大列表
  12. 【原】linux下tar解压缩问题:time stamp in the future
  13. semg特征提取matlab zc,一种融合小波包和双谱分析的肌电信号特征提取方法与流程...
  14. java 邮件批量发送邮件_利用Java实现电子邮件的批量发送[转载]
  15. python爬虫中国土地市场网的相关数据最新2021/5/7
  16. token什么意思中文在C语言中,token什么意思(token里面包含什么信息)
  17. grpc系列1-K8S集群,VIP,grpc._channel._InactiveRpcError connection reset by peer解决方案 Paddleserving服务化部署
  18. [附源码]Python计算机毕业设计电影票购票系统
  19. 太棒了!快来领养一位你的虚拟女友冰冰吧
  20. 在线诱舞坊字体转换FLASH工具 QQ空间专用字体转换器

热门文章

  1. 嵌入式Linux 阻塞和非阻塞 IO 驱动设备访问模式
  2. Java abstract
  3. abstract函数必须重写
  4. 论文综述需要多少重复率才合格?
  5. Linux的df -h命令
  6. 内存 ECC 校验错误
  7. linux+nginx+清楚缓存,缓存 – 清除nginx缓存文件并不总是有效
  8. 哀悼日,页面变为黑白的效果,适用ie11
  9. 出现socket:(10107)系统调用失败
  10. 35岁还能转型网工吗?