对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 19 Python
Python设置在shell脚本中自动补全功能的方法
Jun 25 Python
Python字符串、整数、和浮点型数相互转换实例
Aug 04 Python
python实现简易数码时钟
Feb 19 Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 Python
PyQt5 对图片进行缩放的实例
Jun 18 Python
Django实现文件上传下载功能
Oct 06 Python
解决使用python print打印函数返回值多一个None的问题
Apr 09 Python
基于PyTorch的permute和reshape/view的区别介绍
Jun 18 Python
python安装cx_Oracle和wxPython的方法
Sep 14 Python
Python语言编写智力问答小游戏功能
Oct 13 Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 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多文件上传下载示例分享
2014/02/20 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
详解WordPress中给链接添加查询字符串的方法
2015/12/18 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
2017/05/02 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
javascript实现动态标签云
2015/10/16 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
js模仿java的Map集合详解
2016/01/06 Javascript
JS+CSS3制作炫酷的弹窗效果
2016/11/08 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
vue项目中vue-i18n和element-ui国际化开发实现过程
2018/04/25 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
Python学习教程之常用的内置函数大全
2017/07/14 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
2020/07/30 Python
Python调用C/C++的方法解析
2020/08/05 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
2020/12/08 Python
python3中for循环踩过的坑记录
2020/12/14 Python
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
新护士岗前培训制度
2014/02/02 职场文书
搞笑婚礼主持词
2014/03/13 职场文书
中介业务员岗位职责
2014/04/09 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL