1. 程式人生 > >python .txt檔案讀取及資料處理總結

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,

pythontxt檔案中寫資料時的追加和覆蓋問題

  最近在用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.