数据从txt文本导入python

机器学习实战 p21

源代码:

def file2matrix(filename):
    fr = open(filename)
    numberOfLines = len(fr.readlines())         #get the number of lines in the file
    returnMat = zeros((numberOfLines,3))        #prepare matrix to return
    classLabelVector = []                       #prepare labels return   
    fr = open(filename)
    index = 0
    for line in fr.readlines():
        line = line.strip()
        listFromLine = line.split(‘\t‘)
        returnMat[index,:] = listFromLine[0:3]
        classLabelVector.append(int(listFromLine[-1]))  此句报错
        index += 1
    return returnMat,classLabelVector

报错如下:

>>> mat,label = kNN.file2matrix(‘datingTestSet.txt‘)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "kNN.py", line 50, in file2matrix
    classLabelVector.append(int(listFromLine[-1]))
ValueError: could not convert string to int: largeDoses

解决方法:

listFromLine[-1]的值形似如下格式,带有回车换行符

largeDoses\r\n

smallDoses\r\n

didntLike\r\n

didntLike\r\n

didntLike\r\n

要将字母字符串转换为int类型是不可能的。

作者定义largeDoses 为3,smallDoses 为2,didntLike为1

于是笔者增加了一个字典类型

d = {‘didntLike‘: 1, ‘smallDoses‘: 2, ‘largeDoses‘: 3}

通过d[listFromLine[-1]]得到对应的label

更改后的代码如下:

rf.py

from numpy import *
import operator
from os import listdir

def rf(filename):
    fr = open(filename)
    numberOfLines = len(fr.readlines())         #get the number of lines in the file
    returnMat = zeros((numberOfLines,3))        #prepare matrix to return
    d = {‘didntLike‘: 1, ‘smallDoses‘: 2, ‘largeDoses‘: 3}
    classLabelVector = []
    index = 0
    fr = open(filename)
    for line in fr.readlines():
        listFromLine = line.split(‘\t‘)
        returnMat[index,:] = listFromLine[0:3]
        listFromLine[-1] = listFromLine[-1][0:-2]        #去除尾端的回车换行符
        classLabelVector.append(d[listFromLine[-1]])   #取到字典中对应的label值
        index += 1
    return returnMat,classLabelVector

画图:

import rf
mat,label = rf.rf(‘datingTestSet.txt‘)
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()

>>> ax1 = fig.add_subplot(2, 2, 1)
>>> ax1.scatter(mat[:,0],mat[:,1])
>>> ax2 = fig.add_subplot(2, 2, 2)
>>> ax2.scatter(mat[:,1],mat[:,2])

from numpy import array        #需要自己导入array,否则会报错
>>> ax3 = fig.add_subplot(2, 2, 3)
>>> ax3.scatter(mat[:,0],mat[:,1],15.0*array(label),15.0*array(label))
ax4 = fig.add_subplot(2, 2, 4)
ax4.scatter(mat[:,1],mat[:,2],15.0*array(label),15.0*array(label))
plt.show()

时间: 2024-11-07 17:24:07

数据从txt文本导入python的相关文章

将word文本导入python

之前使用python处理excel比较多,无所不能的python当然也可以处理word啦.docx这个库我也是刚刚接触,那就一点点学吧import docx可能会出现报错,试试pip install python-docx,应该就能解决了 如何迈出最难的第一步,把word导入python?其实很简单,以下是代码: import docx,os #将word文本导入 def getText(filename): doc=docx.Document(filename) fullText=[] for

C# listview控件右击导出数据到txt文本

private void 导出成功点击ToolStripMenuItem_Click(object sender, EventArgs e) { if (listCount.Items.Count == 0) { MessageBox.Show("列表为空!"); } else { List<string> list = new List<string>(); foreach (ListViewItem item in listCount.Items) { st

Bulk Insert:将文本数据(csv和txt)导入到数据库中

将文本数据导入到数据库中的方法有很多,将文本格式(csv和txt)导入到SQL Server中,bulk insert是最简单的实现方法 1,bulk insert命令,经过简化如下 BULK INSERT schema_name . table_name FROM 'data_file' WITH ( FIELDTERMINATOR = 'field_terminator', ROWTERMINATOR = 'row_terminator', DATAFILETYPE=‘WideChar’ )

mysql导入txt文本数据

按照mysql官方文档指示下 创建数据库和表: mysql> create database menagrie; 然后创建表: 1 mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), 2 species VARCHAR(20), sex CHAR(1), birth DATE, death DATE); 然后将以下数据写入一个pet.txt文本中: Fluffy Harold cat f 1993-02-04 \NClaw

sql中的Bulk 导入txt文本

通常,我们会对于一个文本文件数据导入到数据库中,不多说,上代码. 首先,表结构如下.   其次,在我当前D盘中有个文本文件名为2.txt的文件. 在数据库中,可以这样通过一句代码插入. Bulk insert T_Demo From 'D:\2.txt' With ( fieldterminator=',', rowterminator='\n' )   1) bulk insert:  为Sql server 中一个批量插入的操作 2)T_Demo:   要插入的表 3)'D:\2.txt':

获取Excel数据(或部分数据)并导出成txt文本格式

运行代码前先导入jxl架包,以下代码仅供参考: 测试excel文件(我要获取该excel的内容为省.县.乡.村.组和PH的值): ExcelTest01类代码如下: // 读取Excel的类 import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; public class ExcelT

oracle文本导入数据具体步骤和出现部分乱码处理方法

第一步,先将要导入的数据准备 第二步 将xlsx数据另存为txt文档 数据准备好了,现在可以导入到数据库里面了 第四步,打开文本导入器,将准备好的数据文本导入进去,具体效果如下图 第五步,选择要导入的表和对应的字段 第六步,就是点击导入了.也可以点击查看导入脚本 OK,导入部分已经结束了.如果导入脚本和导入数据部分出现乱码具体如下图: 我的是前一百条数据没问题,但后面全部都乱码了. 解决方案是:将xlsx另存为的时候选择文本文件,编码格式不用修改,不要改成UTF-8 或者其他的. 原文地址:ht

Python中将变量按行写入txt文本中

案例一: 讲数组a 循环写入名称为2.txt的文档中 # -*-coding:utf8-*- import requests from lxml import etree a=[1,2,3,4,5,6] print(a) for i in a: f = open('C:/Users/Beckham/Desktop/python/2.txt','a') f.write('\n'+str(i)) f.close() 脚本执行结果 脚本 f = open('C:/Users/Beckham/Deskt

python脚本——一种连接mysql数据库的方法(取回数据为list非tuple格式)并将数据写入TXT

python连接数据库有几种方法,但是对于从数据库取回的数据格式却有些不同,取回为tuple格式的数据处理起来比较麻烦,接下来介绍一种取回为list格式的连接方法,list格式数据处理和使用起来比较方便. #!/usr/bin/python# -*- coding: utf-8 -*-#!/usr/bin/env pythonimport MySQLdbfrom commands import getstatusoutput, getoutputimport sys reload(sys)sys