您的位置 首页 > 娱乐休闲

python .txt文件读取及数据处理总结

1、处理包含数据的文件

最近利用python读取txt文件时遇到了一个小问题,就是在计算两个np.narray()类型的数组时,出现了以下错误:

TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('<U3') dtype('<U3') dtype('<U3')

  • 1

作为一个Python新手,遇到这个问题后花费了挺多时间,在网上找了许多大神们写的例子,最后终于解决了。

总结如下:

(1)出现此问题的原因是:目的是想计算两个数组间的差值,但数组中的元素不是数据类型(float或int等),而是str类型的。

(2)解决方法:在为空数组添加数据过程中,将每个数据强制转化为float型。

如将“c(dataSet[i][:-1])”修改为“ c([float(tk) for tk in dataSet[i][:-1]])”

现将利用Python读取txt文件的过程总结如下:

python版本为

(1)函数定义,存放于Func文件中:

from numpy import *

import random

#读取数据函数,返回list类型的训练数据集和测试数据集

def loadData(fileName):

trainingData=[]

testData=[]

with open(fileName) as txtData:

lines=()

for line in lines:

lineData=line.strip().split(',') #去除空白和逗号“,”

if random.random()<0.7: #数据集分割比例

(lineData) #训练数据集

else:

(lineData) #测试数据集

return trainingData,testData

#输入数据为list类型,分割数据集,分割为特征和标签两部分,返回数据为np.narray类型

def splitData(dataSet):

character=[]

label=[]

for i in range(len(dataSet)):

c([float(tk) for tk in dataSet[i][:-1]])

label.append(dataSet[i][-1])

return array(character),array(label)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

(2)实现两个数组间的减法,存放于main.py文件中:

#__author__=='qustl_000'

#-*- coding: utf-8 -*-

import numpy as np

import Function

fileName="1.txt"

trainingData,testData=Func(fileName)

trainingCharacter,trainingLabel=Func(trainingData)

testCharacter,testLabel=Func(testData)

diff1=np.tile(testCharacter[0],(len(trainingCharacter),1))-trainingCharacter

print('测试数据集的一条数据,扩充到与训练数据集同维:')

prin(testCharacter[0],(len(trainingCharacter),1)))

print('训练数据集:')

print(trainingCharacter)

print('作差后的结果:')

print(diff1)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

(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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

数据集如下:

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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)

  • 1

2.2 python对多文件的操作

下面的程序中,pathDirPos指的是所有积极评论的txt文件所在的目录,在此指的是“F:\Self_Learning\机器学习\python\Bayes\review_polarity\txt_sentoken\pos”。child就是获得的每个txt文件全名。

for allDir in pathDirPos:

child = os.('%s' % allDir)

  • 1
  • 2

2.3 电影评论数据集预处理

下面给出对于电影评论数据集的预处理程序().

'''获取数据,并去除数据中的多余符号,返回list类型的数据集'''

def loadData(pathDirPos,pathDirNeg):

posAllData = [] # 积极评论

negAllData = [] # 消极评论

# 积极评论

for allDir in pathDirPos:

lineDataPos = []

child = os.('%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 = lineS(' ') #用空白分割每个文件中的数据集(此时还包含许多空白字符)

for strc in line:

if strc != "" and len(strc) > 1: #删除空白字符,并筛选出长度大于1的单词

lineDa(strc)

(lineDataPos)

# 消极评论

for allDir in pathDirNeg:

lineDataNeg = []

child = os.('%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 = lineS(' ') #用空白分割每个文件中的数据集(此时还包含许多空白字符)

for strc in line:

if strc != "" and len(strc) > 1: #删除空白字符,并筛选出长度大于1的单词

lineDa(strc)

negAllDa(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):

i()<splitPara):

(posData[i])

(1)

else:

(posData[i])

(1)

for j in range(neg_len):

i()<splitPara):

(negData[j])

(0)

else:

(negData[j])

(0)

return trainingData,traingLabel,testData,testLabel

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何判断txt是否存在”边界阅读