作者:乔山办公网日期:
返回目录: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)
numpy.savetxt('new.csv', my_matrix, delimiter = ',')
将数组或者矩阵存储属为csv文件可以使用如下代码实现:
[python] view plain copy