对python .txt文件读取及数据处理方法总结


Posted in Python onApril 23, 2018

1、处理包含数据的文件

最近利用Python读取txt文件时遇到了一个小问题,就是在计算两个np.narray()类型的数组时,出现了以下错误:

TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('<U3') dtype('<U3') dtype('<U3')

作为一个Python新手,遇到这个问题后花费了挺多时间,在网上找了许多大神们写的例子,最后终于解决了。

总结如下:

(1)出现此问题的原因是:目的是想计算两个数组间的差值,但数组中的元素不是数据类型(float或int等),而是str类型的。

(2)解决方法:在为空数组添加数据过程中,将每个数据强制转化为float型。

如将“character.append(dataSet[i][:-1])”修改为“ character.append([float(tk) for tk in dataSet[i][:-1]])”

现将利用Python读取txt文件的过程总结如下:

python版本为python3.6

(1)函数定义,存放于Function.py文件中:

from numpy import *
import random
#读取数据函数,返回list类型的训练数据集和测试数据集
def loadData(fileName): 
 trainingData=[]
 testData=[]
 with open(fileName) as txtData:
 lines=txtData.readlines()
 for line in lines:
  lineData=line.strip().split(',') #去除空白和逗号“,”
  if random.random()<0.7:  #数据集分割比例
  trainingData.append(lineData) #训练数据集
  else:
  testData.append(lineData) #测试数据集
 return trainingData,testData
#输入数据为list类型,分割数据集,分割为特征和标签两部分,返回数据为np.narray类型
def splitData(dataSet): 
 character=[]
 label=[]
 for i in range(len(dataSet)):
 character.append([float(tk) for tk in dataSet[i][:-1]])
 label.append(dataSet[i][-1])
 return array(character),array(label)

(2)实现两个数组间的减法,存放于main.py文件中:

#__author__=='qustl_000'
#-*- coding: utf-8 -*-
import numpy as np
import Function
fileName="1.txt"
trainingData,testData=Function.loadData(fileName)
trainingCharacter,trainingLabel=Function.splitData(trainingData)
testCharacter,testLabel=Function.splitData(testData)
diff1=np.tile(testCharacter[0],(len(trainingCharacter),1))-trainingCharacter
print('测试数据集的一条数据,扩充到与训练数据集同维:')
print(np.tile(testCharacter[0],(len(trainingCharacter),1)))
print('训练数据集:')
print(trainingCharacter)
print('作差后的结果:')
print(diff1)

(3)运行结果:

测试数据集的一条数据,扩充到与训练数据集同维:
[[ 1.5 60. ]
 [ 1.5 60. ]
 [ 1.5 60. ]
 [ 1.5 60. ]
 [ 1.5 60. ]
 [ 1.5 60. ]
 [ 1.5 60. ]
 [ 1.5 60. ]
 [ 1.5 60. ]
 [ 1.5 60. ]
 [ 1.5 60. ]
 [ 1.5 60. ]
 [ 1.5 60. ]]
训练数据集:
[[ 1.5 40. ]
 [ 1.5 50. ]
 [ 1.6 40. ]
 [ 1.6 50. ]
 [ 1.6 60. ]
 [ 1.6 70. ]
 [ 1.7 60. ]
 [ 1.7 70. ]
 [ 1.7 80. ]
 [ 1.8 60. ]
 [ 1.8 80. ]
 [ 1.8 90. ]
 [ 1.9 90. ]]
作差后的结果:
[[ 0. 20. ]
 [ 0. 10. ]
 [ -0.1 20. ]
 [ -0.1 10. ]
 [ -0.1 0. ]
 [ -0.1 -10. ]
 [ -0.2 0. ]
 [ -0.2 -10. ]
 [ -0.2 -20. ]
 [ -0.3 0. ]
 [ -0.3 -20. ]
 [ -0.3 -30. ]
 [ -0.4 -30. ]]

数据集如下:

1.5,40,thin
1.5,50,fat
1.5,60,fat
1.6,40,thin
1.6,50,thin
1.6,60,fat
1.6,70,fat
1.7,50,thin
1.7,60,thin
1.7,70,fat
1.7,80,fat
1.8,60,thin
1.8,70,thin
1.8,80,fat
1.8,90,fat
1.9,80,thin
1.9,90,fat

2、处理文本文件,如情感识别类的文件

在进行文本的情感分类时,从电影评论数据集网站上下载数据集后,发现数据集中存在许多不需要的符号。截取部分包含多余字符的数据如下:

对python .txt文件读取及数据处理方法总结

下载数据集后,所有txt文件存放在两个文件夹:“neg”(包含消极评论)和“pos”(包含积极地评论)中。

两者的存放目录如下:“F:\Self_Learning\机器学习\python\Bayes\review_polarity\txt_sentoken”。后面需要用到文件路径,此路径可根据自己存放目录修改。

主要涉及到的python操作有:多余字符的删除、文件夹中多文件的操作。

2.1 多余字符的删除

首先,我们要删除多余的符号,获得干净的数据。

经过查找资料,知道删除一条文本数据中不需要的符号,可以通过re.sub(chara,newChara,data)函数实现,其中chara是需要删除的字符,newChara是删除字符后相应位置的替换字符,data是需要操作的数据。比如下面的代码,指的是删除lines中包含的前面列出的字符,并用空白替换:

lineString = re.sub("[\n\.\!\/_\-$%^*(+\"\')]+|[+—()?【】“”!:,;.?、~@#¥%…&*()0123456789]+", " ", lines)

2.2 python对多文件的操作

下面的程序中,pathDirPos指的是所有积极评论的txt文件所在的目录,在此指的是“F:\Self_Learning\机器学习\python\Bayes\review_polarity\txt_sentoken\pos”。child就是获得的每个txt文件全名。

for allDir in pathDirPos:
 child = os.path.join('%s' % allDir)

2.3 电影评论数据集预处理

下面给出对于电影评论数据集的预处理程序(python3.6).

'''获取数据,并去除数据中的多余符号,返回list类型的数据集'''
def loadData(pathDirPos,pathDirNeg):
 posAllData = [] # 积极评论
 negAllData = [] # 消极评论
 # 积极评论
 for allDir in pathDirPos:
 lineDataPos = []
 child = os.path.join('%s' % allDir)
 filename = r"review_polarity/txt_sentoken/pos/" + child
 with open(filename) as childFile:
  for lines in childFile:
  lineString = re.sub("[\n\.\!\/_\-$%^*(+\"\')]+|[+—()?【】“”!:,;.?、~@#¥%…&*()0123456789]+", " ", lines)
  line = lineString.split(' ') #用空白分割每个文件中的数据集(此时还包含许多空白字符)
  for strc in line:
   if strc != "" and len(strc) > 1: #删除空白字符,并筛选出长度大于1的单词
   lineDataPos.append(strc)
  posAllData.append(lineDataPos)
 # 消极评论
 for allDir in pathDirNeg:
 lineDataNeg = []
 child = os.path.join('%s' % allDir)
 filename = r"review_polarity/txt_sentoken/neg/" + child
 with open(filename) as childFile:
  for lines in childFile:
  lineString = re.sub("[\n\.\!\/_\-$%^*(+\"\')]+|[+—()?【】“”!:,;.?、~@#¥%…&*()0123456789]+", " ", lines)
  line = lineString.split(' ') #用空白分割每个文件中的数据集(此时还包含许多空白字符)
  for strc in line:
   if strc != "" and len(strc) > 1: #删除空白字符,并筛选出长度大于1的单词
   lineDataNeg.append(strc)
  negAllData.append(lineDataNeg)
 return posAllData,negAllData
'''划分数据集,将数据集划分为训练数据和测试数据,参数splitPara为分割比例'''
def splitDataSet(pathDirPos,pathDirNeg,splitPara):
 trainingData=[]
 testData=[]
 traingLabel=[]
 testLabel=[]
 posData,negData=loadData(pathDirPos,pathDirNeg)
 pos_len=len(posData)
 neg_len=len(negData)
 #操作积极评论数据
 for i in range(pos_len):
 if(random.random()<splitPara):
  trainingData.append(posData[i])
  traingLabel.append(1)
 else:
  testData.append(posData[i])
  testLabel.append(1)
 for j in range(neg_len):
 if(random.random()<splitPara):
  trainingData.append(negData[j])
  traingLabel.append(0)
 else:
  testData.append(negData[j])
  testLabel.append(0)
 return trainingData,traingLabel,testData,testLabel

以上这篇对python .txt文件读取及数据处理方法总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 获取指定文件夹下所有文件名称并写入列表的实例
Apr 23 Python
Python 从列表中取值和取索引的方法
Dec 25 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
基于python2.7实现图形密码生成器的实例代码
Nov 05 Python
Python for循环及基础用法详解
Nov 08 Python
Python如何基于selenium实现自动登录博客园
Dec 16 Python
Python TKinter如何自动关闭主窗口
Feb 26 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
Django返回HTML文件的实现方法
Sep 17 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
Apr 13 Python
拒绝盗图!教你怎么用python给图片加水印
Jun 04 Python
python 读文件,然后转化为矩阵的实例
Apr 23 #Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 #Python
Python 将pdf转成图片的方法
Apr 23 #Python
利用python将pdf输出为txt的实例讲解
Apr 23 #Python
Go/Python/Erlang编程语言对比分析及示例代码
Apr 23 #Python
Python 3.6 读取并操作文件内容的实例
Apr 23 #Python
Python 循环语句之 while,for语句详解
Apr 23 #Python
You might like
PHP读取目录下所有文件的代码
2008/01/07 PHP
深入学习微信网址链接解封的防封原理visit_type
2019/08/15 PHP
js继承 Base类的源码解析
2008/12/30 Javascript
javascript获取所有同类checkbox选项(实例代码)
2013/11/07 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
类似php的js数组的in_array函数自定义方法
2013/12/27 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
JavaScript自定义分页样式
2017/01/17 Javascript
基于AngularJS的拖拽文件上传的实例代码
2017/07/15 Javascript
基于bootstrap写的一点localStorage本地储存
2017/11/21 Javascript
简述vue中的config配置
2018/01/23 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
基于ajax实现上传图片代码示例解析
2020/12/03 Javascript
[52:40]完美世界DOTA2联赛PWL S2 Magma vs GXR 第一场 11.29
2020/12/02 DOTA
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
Python实现ping指定IP的示例
2018/06/04 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
django如何通过类视图使用装饰器
2019/07/24 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
python中有关时间日期格式转换问题
2019/12/25 Python
python实现udp聊天窗口
2020/03/31 Python
python如何快速拼接字符串
2020/10/28 Python
python和opencv构建运动检测器的实现
2021/03/03 Python
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
AMAVII眼镜官网:时尚和设计师太阳镜
2019/05/05 全球购物
北京SQL新华信咨询
2016/09/30 面试题
初婚未育未抱养证明
2014/01/12 职场文书
办公自动化毕业生求职信
2014/03/09 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL
详解Spring Security中的HttpBasic登录验证模式
2022/03/17 Java/Android