对python .txt文件读取及数据处理方法总结
作者:007lizhen 发布时间:2022-08-04 02:36:07
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
来源:https://blog.csdn.net/weixin_38215395/article/details/78679296


猜你喜欢
- asp之家注:为什么要防止访客频繁刷新页面呢?也许你会说他想刷新就让他刷新吧,没什么关系,而且还增加了网页的PV,呵呵。但是有的页面我们可能
- 0.object类源码class object: """ The most base type &
- Python字符编码目前计算机内存的字符编码都是Unicode,目前国内的windows操作系统采用的是gbk。python2默认的字符编码
- mysql_query("set autocommit=0"); $list_one = $db->fetch_f
- python可以装在任意的系统盘中,没有强制要求,默认路径是装在C盘。为什么软件默认安装位置是在C盘?下面我们来说一说。首先,需要明确一点,
- 记得导入包,其他按键可类比def keyPressEvent(self, event): if event.key() == Q
- Python写倒序输出(任意位数)倒序输出数字这种方法最后输出的是字符而不是数字x=int(input('请输入任意一个数字:
- 一、配置抓包工具1.安装软件本文选择的抓包工具:Fiddler 具体的下载安装这里不详细赘述!(网上搜Fiddler安
- 在对数值进行格式化的时候,一个常见的问题是按照千分位格式化,网上对这个问题已经有很多种解决方法了,还可以利用Array.prototype.
- :hover是我们在CSS设计中最常运用的伪类之一,许多绚丽效果的实现离不开伪类:hover,比如我们常见的纯CSS菜单、相册效果等等。或许
- 1、找到mysql安装路径D:\xxx\MYSQL\MySQL Workbench CE 6.0.8下的mysqldump.exe,由于脚本
- pytorch的广播语义(broadcasting semantics),和numpy的很像,所以可以先看看numpy的文档:1、什么是广播
- 一、Python图像处理PIL库1.1 转换图像格式# PIL(Python Imaging Library)from PIL import
- 本文实例讲述了PHP简单预防sql注入的方法。分享给大家供大家参考,具体如下:出现sql注入一般都是因为语法不规范不严谨造成的,问题出现在s
- MySQL扩展库操作MySQL数据库的步骤如下:1:获取连接.2:选取书库。3:设置操作编码。4:发送SQL指令(MySQL数据库可以分为四
- 无论是我们上学时还之后的工作中,基本都需要用到电子证件照片,这类照片基本都对照片尺寸、背景色有要求,本文我们来看一下如何只用不到 20 行
- 函数的增益值torch.nn.init.calculate_gain(nonlinearity, param=None)提供了对非线性函数增
- 在SQL查询中,关键词Like可提供模糊查询功能,它通常与通配符一起使用。1 Like条件适用数据库字段类型 &nbs
- 1.MySQL官网下载压缩版文件,放至安装路径下载zip安装包MySQL :: Download MySQL Community Serve
- SQL语句举例:SELECT * FROM `test` WHERE `id`=1;当我们输入一条SQL语句,返回一个结果时,那这条语句在