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、处理文本文件,如情感识别类的文件
在进行文本的情感分类时,从电影评论数据集网站上下载数据集后,发现数据集中存在许多不需要的符号。截取部分包含多余字符的数据如下:
下载数据集后,所有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文件读取及数据处理方法总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
在当前目录下通过文件名查找一个文件,使用类似于这样的命令:find . -iname '*something*'。在所有路径下通过文件名查找文件,使用 locate something (但注意到 updatedb 可能没有对最近新建的文件建立索引,所以你可能无法定位到这些未被索引的文件)。 使用 ag 在源代码或数据文件里检索(grep -r 同样可以做到,但相比之下 ag 更加先进)。 将 H
本文向大家介绍Java读取本地json文件及相应处理方法,包括了Java读取本地json文件及相应处理方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: json文件 以上这篇Java读取本地json文件及相应处理方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
本文向大家介绍Java读取文件方法汇总,包括了Java读取文件方法汇总的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Java读取文件的方法,供大家参考,具体内容如下 1、按字节读取文件内容 2、按字符读取文件内容 3、按行读取文件内容 4、随机读取文件内容 5、将内容追加到文件尾部 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
问题内容: 我想从一个充满整数的文本文件中读取数据,并让程序在求和时将这些整数打印到屏幕上。这应该不难,但我无法弄清楚!!! 这是极其简化的文本文件: 这是我应该工作的代码: 最后,这是我得到的输出: 问题答案: 您在循环中两次调用textfile.nextInt()。尝试:
本文向大家介绍python读取与处理netcdf数据方式,包括了python读取与处理netcdf数据方式的使用技巧和注意事项,需要的朋友参考一下 netcdf是气候数据中的主流格式,当涉及到大范围的全球数万个格网点数据时,使用python脚本可以较快地读取与处理。 举例子 以上这篇python读取与处理netcdf数据方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐
我目前正在做一个非常非常重要的学校项目。我需要在C/C中提取WAVE文件的信息,并使用这些信息来获取语音信号的LPC。但是,为了做到这一点,我需要对信号进行一些预处理,例如进行过零和能量分析等。这意味着我需要符号和真实值。问题是我不知道如何获得有用的信息和正确的格式。我已经阅读了文件中的每个字段,但我不确定我做得对不对。请提出建议? 这是我目前读取文件的方式: =fread( 提前谢谢。