中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

對python .txt文件讀取及數據處理方法有哪些

發布時間:2021-07-26 10:12:54 來源:億速云 閱讀:179 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關對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')

作為一個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文件讀取及數據處理方法有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

师宗县| 北碚区| 尤溪县| 太保市| 东海县| 平顺县| 南丹县| 浮山县| 福贡县| 长泰县| 桑日县| 德惠市| 崇阳县| 扶风县| 新河县| 牡丹江市| 兴山县| 乌拉特前旗| 东安县| 托克逊县| 普宁市| 黄骅市| 崇信县| 清河县| 穆棱市| 临泉县| 张家口市| 咸宁市| 宣恩县| 晋城| 巴青县| 汉源县| 长沙县| 广平县| 潮州市| 勃利县| 日土县| 湖州市| 泸西县| 进贤县| 大竹县|