乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > <em>Python</em>如何将txt或者csv文件的数据转成矩阵?-csv转excel p

<em>Python</em>如何将txt或者csv文件的数据转成矩阵?-csv转excel p

作者:乔山办公网日期:

返回目录:excel表格制作


使用 python list即可,e79fa5e98193e59b9ee7ad94363因为list可以加入不同的数据类型的数据。

results = list()
lines = open('cvs_file', 'r').readlines()
for line in lines:
    elements = line.strip().split(',') # supposed limiter is ','
    for e in elements:
        try:
            results.append(float(e))
        except:
            continue
# Here results will contains all splitted elements
# all elements are string read from cvs file, so you need to
# converse it with float operator. But if element is read string
# we can catch conversion exception and throw it anyway.


很多时候,我们将数据存在txt或者csv格式的文件里,最后再用python读取出来,存到数组或者列表里,再做相应计算。本文首先介绍写入txt的方法,再根据不同的需求(存为数组还是list),介绍从e69da5e6ba90e799bee5baa6e997aee7ad94332txt读取浮点数的方法。
一、写入浮点数到txt文件:
假设每次有两个浮点数需要写入txt文件,这里提供用with关键字打开文件的方法,使用with打开文件是一个很好的习惯,因为with结束,它就会自动close file,不用手动再去flie.close()。

[python] view plain copy
with open('file_path/filename.txt','a') as file:
write_str = '%f %f\n'%(float_data1,float_data2)
file.write(write_str)

二、从txt文件提取浮点数到numpy数组或list列表

首先假设你有一个odom.txt 的文件,里面每一行的数据个数都相同,如截图所示:

1.如果你是想把这些数据读取出来,存为numpy数组,那么一句代码可以搞定:

[python] view plain copy
a = numpy.loadtxt('odom.txt')

存为numpy数组以后,a的尺寸可以用a.shape进行查看,这里应为:(14,2)也就是14行2列。如果你觉得这个形状不是你期待的,你可以用:

[python] view plain copy
b = numpy.reshape(a,(你想要的形状))

b = numpy.reshape(a,(-1,1,2))
那么b就是一个三维数组了(14,1,2)

2.如果只是想读出来,存到一个list里,那就用下面的常用python格式了:

[python] view plain copy
with open('odom.txt', 'r') as f:
data = f.readlines() #txt中所有字符串读入data

for line in data:
odom = line.split() #将单个数据分隔开存好
numbers_float = map(float, odom) #转化为浮点数
print numbers_float
csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格:

就可以存储为csv文件,文件内容是:
No.,Name,Age,Score
1,mayi,18,99
2,jack,21,89
3,tom,25,95
4,rain,19,80

假设上述csv文件保存为"test.csv"
1.读文件
如何用Python像操作Excel一样提取其中的一列,即一个字段,利用Python自带的csv模块,有两种方法可以实现:
第一种方法使用reader函数,接收一个可迭代的对象(比如csv文件),能返回一个生成器,就可以从其中解析出csv的内容:比如下面的代码可以读取csv的全部内容,以行为单位:

#!/usr/bin/python3
# -*- conding:utf-8 -*-
__author__ = 'mayi'

import csv

#读
with open("test.csv", "r", encoding = "utf-8") as f:
reader = csv.reader(f)
rows = [row for row in reader]

print(rows)

得到:
[['No.', 'Name', 'Age', 'Score'],
['1', 'mayi', '18', '99'],
['2', 'jack', '21', '89'],
['3', 'tom', '25', '95'],
['4', 'rain', '19', '80']]

要提取其中某一列,可以用下面的代码:

#!/usr/bin/python3
# -*- conding:utf-8 -*-
__author__ = 'mayi'

import csv

#读取第二列的内容
with open("test.csv", "r", encoding = "utf-8") as f:
reader = csv.reader(f)
column = [row[1] for row in reader]

print(column)

得到:
['Name', 'mayi', 'jack', 'tom', 'rain']

注意从csv读出的都是str类型。这种方法要事先知道列的序号,比如Name在第2列,而不能根据'Name'这个标题查询。这时可以采用第二种方法:
第二种方法是使用DictReader,和reader函数类似,接收一个可迭代的对象,能返回一个生成器,但是返回的每一个单元格都放在一个字典的值7a686964616fe59b9ee7ad94334内,而这个字典的键则是这个单元格的标题(即列头)。用下面的代码可以看到DictReader的结构:

# -*- conding:utf-8 -*-
__author__ = 'mayi'

import csv

#读
with open("test.csv", "r", encoding = "utf-8") as f:
reader = csv.DictReader(f)
column = [row for row in reader]

print(column)

得到:
[{'No.': '1', 'Age': '18', 'Score': '99', 'Name': 'mayi'},
{'No.': '2', 'Age': '21', 'Score': '89', 'Name': 'jack'},
{'No.': '3', 'Age': '25', 'Score': '95', 'Name': 'tom'},
{'No.': '4', 'Age': '19', 'Score': '80', 'Name': 'rain'}]

如果我们想用DictReader读取csv的某一列,就可以用列的标题查询:

#!/usr/bin/python3
# -*- conding:utf-8 -*-
__author__ = 'mayi'

import csv

#读取Name列的内容
with open("test.csv", "r", encoding = "utf-8") as f:
reader = csv.DictReader(f)
column = [row['Name'] for row in reader]
print(column)

得到:
['mayi', 'jack', 'tom', 'rain']

2.写文件
读文件时,我们把csv文件读入列表中,写文件时会把列表中的元素写入到csv文件中。

#!/usr/bin/python3
# -*- conding:utf-8 -*-
__author__ = 'mayi'

import csv

#写:追加
row = ['5', 'hanmeimei', '23', '81']
out = open("test.csv", "a", newline = "")
csv_writer = csv.writer(out, dialect = "excel")
csv_writer.writerow(row)

得到:

Python处理csv文件时经常会用到讲csv文件整体读取为一个数组或者矩阵的情况,借助numpy包,可以使用如下代码简洁高效低实现:

[python] view plain copy

  • import numpy  

  • my_matrix = numpy.loadtxt(open("c:\\1.csv","rb"),delimiter=",",skiprows=0)  

  • 将数组或者矩阵存储为csv文件可以使用如下代码实现:

    [python] view plain copy

  • numpy.savetxt('new.csv', my_matrix, delimiter = ',')  

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网