对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使用any判断一个对象是否为空的方法
Nov 19 Python
Python中的super()方法使用简介
Aug 14 Python
简单谈谈Python中的闭包
Nov 30 Python
Python使用filetype精确判断文件类型
Jul 02 Python
Python中工作日类库Busines Holiday的介绍与使用
Jul 06 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
Jul 09 Python
python找出完数的方法
Nov 12 Python
python3中rank函数的用法
Nov 27 Python
Python timer定时器两种常用方法解析
Jan 20 Python
如何使用Python调整图像大小
Sep 26 Python
教你利用Selenium+python自动化来解决pip使用异常
May 20 Python
Python实现8种常用抽样方法
Jun 27 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
在字符串中把网址改成超级链接
2006/10/09 PHP
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
2009/06/08 PHP
php短域名转换为实际域名函数
2011/01/17 PHP
php中文乱码问题的终极解决方案汇总
2017/08/01 PHP
javascript jQuery插件练习
2008/12/24 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
Sea.JS知识总结
2016/05/05 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
微信小程序 网络API发起请求详解
2016/11/09 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
深入理解Promise.all
2018/08/08 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
python中字典dict常用操作方法实例总结
2015/04/04 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
国际花店:Pickup Flowers
2020/04/10 全球购物
环保建议书300字
2014/05/14 职场文书
责任担保书范文
2014/05/21 职场文书
医院节能减排方案
2014/06/13 职场文书
党员评议思想汇报
2014/10/08 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书