对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使用正则表达式检测密码强度源码分享
Jun 11 Python
Python中使用第三方库xlrd来读取Excel示例
Apr 05 Python
python简单实现基于SSL的IRC bot实例
Jun 15 Python
numpy排序与集合运算用法示例
Dec 15 Python
python实现猜单词小游戏
May 22 Python
Python wxPython库使用wx.ListBox创建列表框示例
Sep 03 Python
matplotlib实现区域颜色填充
Mar 18 Python
python基于itchat模块实现微信防撤回
Apr 29 Python
Python中的支持向量机SVM的使用(附实例代码)
Jun 26 Python
python3 正则表达式基础廖雪峰
Mar 25 Python
浅谈pytorch中的dropout的概率p
May 27 Python
Django框架模板用法详解
Jun 10 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
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
浅析PHP Socket技术
2013/08/02 PHP
php简单日历函数
2015/10/28 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
PHP goto语句用法实例
2019/08/06 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
JavaScript 动态改变图片大小
2009/06/11 Javascript
JQuery toggle使用分析
2009/11/16 Javascript
Javascript 面向对象(三)接口代码
2012/05/23 Javascript
document.all的一个比较完整的总结及案例
2013/01/31 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
JavaScript函数中的this四种绑定形式
2017/08/15 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
2017/12/29 Javascript
nodejs结合socket.io实现websocket通信功能的方法
2018/01/12 NodeJs
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
JavaScript使用闭包模仿块级作用域操作示例
2019/01/21 Javascript
Vue.extend实现挂载到实例上的方法
2019/05/01 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
Python进程间通信用法实例
2015/06/04 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
python+logging+yaml实现日志分割
2019/07/22 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
python处理excel绘制雷达图
2019/10/18 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
高中自我评价分享
2013/12/05 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
百日安全生产活动总结
2014/07/05 职场文书
详解Redis瘦身指南
2021/05/26 Redis