对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的Django框架中的表单处理示例
Jul 17 Python
python 网络爬虫初级实现代码
Feb 27 Python
Python实战小程序利用matplotlib模块画图代码分享
Dec 09 Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 Python
python实现五子棋小游戏
Mar 25 Python
Python爬虫beautifulsoup4常用的解析方法总结
Feb 25 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
python利用多种方式来统计词频(单词个数)
May 27 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
Jan 12 Python
TensorFlow——Checkpoint为模型添加检查点的实例
Jan 21 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
Mar 18 Python
在Keras中实现保存和加载权重及模型结构
Jun 15 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的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
深入apache host的配置详解
2013/06/09 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
Yii2结合Workerman的websocket示例详解
2018/09/10 PHP
JavaScript 图像动画的小demo
2012/05/23 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
jQuery EasyUI之DataGrid使用实例详解
2016/01/04 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
浅谈flask截获所有访问及before/after_request修饰器
2018/01/18 Python
python实现聚类算法原理
2018/02/12 Python
python如何修改装饰器中参数
2018/03/20 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
带你认识Django
2019/01/15 Python
python能开发游戏吗
2020/06/11 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
2020/10/26 Python
html5 音乐播放器 audio 标签使用概述
2013/07/15 HTML / CSS
TIME时代杂志台湾总代理:台时亚洲
2018/10/22 全球购物
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
网游商务专员求职信
2013/10/15 职场文书
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
护理专科学生自荐书
2014/07/05 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
政审证明材料
2015/06/19 职场文书
家属联谊会致辞
2015/07/31 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
mybatis 获取更新记录的id
2022/05/20 Java/Android
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
2022/05/25 SQL Server