python读取txt,将string转float的三种方法
python读取txt,将string转float的三种方法
方法一:
import numpy as np
data_file = 'iris.txt'#你的数据集.txt文件
def get_dataset(data_file):
with open(data_file,'r') as in_file:
txt = in_file.readlines()#将数据集以字符串列表的形式放在txt里面['1.2 3 4\n','1 2
#3\n']
txt = [txt[i].split(' ') for x in range(len(txt))]#将字符串txt[i](['1.2 3 4\n','1
#2 3\n'])转化为[['1.2','2','3','\n'],['1','2','3','\n']]
txt = [txt[i].strip('[\n,\t]') for i in range(len(txt))]#去掉字符串不能转换为float的
#特殊字符--->[['1.2','2','3'],['1','2','3']]
for i in range(len(txt)): #数据集长度(样本个数)
for j in range(len(txt[0])):#样本特征数(因为每一个样本一般取同样数目特征数,所以可以用
#txt[0]代替任意长度)
txt[i][j] = float(txt[i][j])
return txt
方法二:
#法二:用map的方法转
def get_dataset(data_file):
with open(data_file,'r') as in_file:
txt = in_file.readlines()#read()返回字符串 readline()读一行,返回字符串 readlines()
# 全部读,返回字符串列表,含有\n
for i in range(len(txt)):
txt[i] = list(map(float, filter(None,re.split('[\t \n]', txt[i].strip()))))#这
#一行和后面注释的两行等价
print(txt)
#txt_list = re.split('[\t \n]', txt.strip())
#txt_out = list(map(float, txt_list)) # 高效的map ,# 这一步的list极其重要,否则得到的
#只是一个map对像
方法三:
#法三:用read()读取数据+map的方法转:
def get_dataset(data_file):
in_file = open(data_file, mode='r')
txt = in_file.read() #.split('\n').split('\t')
txt_list = re.split('[\t \n]', txt.strip())
txt_out = map(float, txt_list) # 高效的map
print(list(txt_out)) # 这一步的list极其重要,否则得到的只是一个map对像
方法三和方法一、二返回的数据类型不一样,方法一、二是把每个数据集的特征分别放在一个list里面,再用一个大的list装所有数据集,这样就成了一个二维的数组,而方法三就是用read()的方法,将所有的数据集的特征放在一个list里面,没有区分特征属于哪一类。
运行结果如下:
方法一结果:
方法二结果:
方法三结果:
最新文章
- 驱动开发:内核层InlineHook挂钩函数
- bmp位图文件格式
- 图解+原理推导完全读懂KPM算法
- 服务器安装jkd1.8运行jar以及一系列的操作
- idea设置Java class模板注释
- 【Spring源码】4. 自己搞个标签?~自定义标签保姆级全过程(图解向,堆图预警)
- 使用CStdioFile操作文件和filetxt.cpp报错和filecore.cpp报错
- 通过过滤器Filter来完成url访问权限限制
- 文件服务器之一:NFS 服务器
- LVS均衡负载(一) LVS详解
- 系统测试常见类型及说明
- C++中find()函数用法
- CSAPP——Lab3——AttackLab
- hadoop安装步骤
- Java中带返回值的线程池Future
- 深入 javascript 之 call函数 用法
- Fedora 安装字体