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、處理文字檔案,如情感識別類的檔案
在進行文字的情感分類時,從電影評論資料集網站上下載資料集後,發現數據集中存在許多不需要的符號。擷取部分包含多餘字元的資料如下:
下載資料集後,所有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\.\!\/_\-$%^*(+\"\')]+|[+—()?【】“”!:,;.?、[email protected]#¥%…&*()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\.\!\/_\-$%^*(+\"\')]+|[+—()?【】“”!:,;.?、[email protected]#¥%…&*()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檔案讀取及資料處理總結
1、處理包含資料的檔案 最近利用Python讀取txt檔案時遇到了一個小問題,就是在計算兩個np.narray()型別的陣列時,出現了以下錯誤: TypeError: ufunc 'subtract' did not contain a loop wi
python-從檔案讀取json資料寫到資料庫
#!/bin/env python #coding=utf-8 import sys import urllib2 import json import datetime import pymysql as MySQLdb import time from itert
【Python-資料讀取】讀取txt檔案每一行資料生成列表
好多時候我們要讀取txt檔案獲得資料,並把資料的按行或者按列存放到列表中,從而生成特徵和類別標籤。今天讀了好幾個都沒有成功,最後發現,資料間的分隔符十分重要,總結一下經驗。 資料間的分隔符是空格 讀取的程式碼如下所示: file=open('ll.txt') dataM
python操作txt檔案中資料教程[3]-python讀取資料夾中所有txt檔案並將資料轉為csv檔案
python操作txt檔案中資料教程[3]-python讀取資料夾中所有txt檔案並將資料轉為csv檔案 覺得有用的話,歡迎一起討論相互學習~Follow Me 參考文獻 python操作txt檔案中資料教程[1]-使用python讀寫txt檔案 python操作txt檔案中資料教程[2]-pyth
python之.txt檔案讀取小結
一.按行讀取.txt檔案。 方法1. 用next函式去讀取行,首先建立reader,每next一下,指標就往下讀取一行,而且要注意,雖然reader用print函式是打不開裡面的內容的,但是在reader內部,csv表格是按行儲存在reader中的。 import csv filename_
python-檔案讀取json資料寫到資料庫
#!/bin/env python#coding=utf-8 import sysimport urllib2import jsonimport datetimeimport pymysql as MySQLdbimport timefrom itertools import islice reload(s
pytorch學習筆記(2)-使用自定義txt檔案讀取資料
import os import torch from PIL import Image from torch.utils.data import Dataset from torchvision import datasets, models, transfo
python 11day--python基礎總結:運算子、流程控制及資料型別總結
一、python的運算子: 1、算數運算:加、減、乘、除、求餘、求商、x的y次方 2、邏輯運算:and、 or 、not 3、比較運算子:等於、不等於、大於、小於、大於等於、小於等於 4、賦值運算子:加賦值、減賦值、乘賦值、除賦值、求餘賦值、求商賦值、x的y次方賦值、普通賦值 5、成員運算子 :in
Android Studio平臺下使用hellochart實現從txt檔案讀取資料繪折線圖
Android Studio平臺下使用hellochart實現從文字讀取資料繪折線圖 本人是一個剛剛接觸Android不超過兩個月的小白,最近在做的論文是關於這一塊的相關內容。所有的東西都是自學的,聽導師的建議也是第一次留個這樣的資料,可能有很多地方理解不到位,
python使用pandas模組實現檔案讀取、字串處理、去重排序、excel生成
最近學習python,用python實現一個小需求,最後寫入excel使用到pandas模組: 某中學學生在500米短跑訓練比賽中的資料,體育老師把學生成績結果記錄在檔案中(studentdata.txt),記錄格式如下: 卡納瓦, 2001-11-8,2:27,2:33,
用python向txt檔案中寫資料時的追加和覆蓋問題
最近在用python從WOS網站中爬取內容並儲存到本地的txt檔案中,發現每次寫入都是把txt檔案中原來存在的內容覆蓋掉了,那麼如何才能在原來的基礎上繼續往裡面新增內容呢? 1、原來的開啟檔案的方式是: file = open(pathTxt, 'w', encoding
Matlab讀取txt檔案中的資料(使用textread函式)
在使用Matlab處理資料時,我們經常需要讀取txt文件,可以使用Matlab中強大的textread函式。它的基本語法是:[A,B,C,...] = textread(filename,format)[A,B,C,...] = textread(filename,forma
QT和VS讀取.txt檔案中的資料並儲存為陣列
QT中讀取.txt檔案並儲存為陣列 QFile fpx("/work/qt_workspace/saly/pix_x.txt"); QFile fpy("/work/qt_workspace/saly/pix_y.txt"); // QVector&l
Python從資料庫讀取大量資料批量寫入檔案
使用機器學習訓練資料時,如果資料量較大可能我們不能夠一次性將資料載入進記憶體,這時我們需要將資料進行預處理,分批次載入進記憶體。下面是程式碼作用是將資料從資料庫讀取出來分批次寫入txt文字檔案,方便我
Python檔案操作及資料夾遍歷
os.getcwd() 得到當前工作目錄,即當前Python指令碼工作的目錄路徑 os.listdir() 返回指定目錄下的所有檔案和目錄名 os.remove() 函式用來刪除一個檔案 os.removedirs(r“c:\python”)刪除多個目錄
python txt檔案處理
輸入為:要求輸出為:程式碼:file = open('test.txt','rb') file_context = file.read().decode('utf-8') #print ("整個檔案內容:", file_context)#寫檔案 outdata = open(
在Matalb中如何讀取TXT檔案中的資料
根據txt文件不同種類介紹不同的讀取資料方法 一、純資料檔案(沒有字母和中文,純數字) 對於這種txt文件,從matalb中讀取就簡單多了 例如test.txt檔案,內容為 17.901 -1.1111 33.045 17.891 -1.1286 33.045 17.8
Android Gallery3D原始碼學習總結(三)——Cache快取及資料處理流程
第一,在應用程式中有三個執行緒存在:主執行緒(隨activity的宣告週期啟動銷燬)、feed初始化執行緒(進入程式時只執行一次,用於載入相簿初始資訊)、feed監聽執行緒(一直在跑,監聽相簿和相片的變更)。 第二,不考慮CacheService 啟動的主要流程歸納如下: 1
python讀寫txt檔案中文字元的處理
最近一個專案,需要儲存中文字元和數字英文字母等到txt檔案中,使用的python2.7,說實話,python2的編碼問題真是個大坑! 花了半上午才解決問題,這裡簡單的總結一下。 python開啟txt檔案預設的是ascii編碼,是無法處理中文字元的,所以需要統一轉換為ut
Python例項1-讀取指定資料夾下指定型別的圖片名,打亂後輸出txt
import random import os def file_name(file_dir): L=[] for root, dirs, files in os.