简介
做一个竞赛时,第一步处理竞赛给出的数据文件。编写程序时才发现,给定的.csv文件用 csv.reader
处理后,某一列的数据本应为m*n的矩阵,实际显示结果为一个由[],[]
等组成的长字符串!
。。。
本来是用字符串分割函数strip
将二维数据分开。但是程序写的很麻烦,后来直接在MATLAB里将.csv
文件转换为.txt
文件,再在python里调用了。
这里总结python读取.csv
和.txt
文件的写法,以及在读取后,如何将字符串转换为矩阵。具体MATLAB的程序,不在此处附出。
1. python 读取.csv文件
目的:
实现一个csv
文件的读取,并且将其中的由二维矩阵组成的长字符串切割,转换为想要的二维矩阵,最后用一个列表存储所有的二维矩阵。
程序:
import csv
birth_weight_file = '***.csv' # 文件名
# 处理文件:将图形的坐标提取出来
data = [] # 存储所有图形的坐标点
with open(birth_weight_file) as csvfile:
csv_reader = csv.reader(csvfile) # 使用csv.reader读取csvfile中的文件
birth_header = next(csv_reader) # 读取第一行每一列的标题
# 将csv 文件中的数据保存到birth_data中
for row in csv_reader:
data_row = [] # 存储每一行的数据
data_location = row[3] # 读取第4列数据
# 字符串分割
dlist = data_location.strip('[').strip(']') # strip:只能去除字符串首尾的特定字符
dlist = dlist.split(',') # split:字符串分隔符
for x in dlist:
dlist2 = x.strip(' [').strip(']') # 二次字符串分割
dfloat = float(dlist2) # 将str转换为浮点型
data_row.append(dfloat)
data_row_array = np.array(data_row).reshape([int(len(data_row)/2),2]) # 转换为二维矩阵
data.append(data_row_array)
2. python读取.txt文件
目的:
实现.txt
文件的读取,其中每一行的字符串均代表一个二维矩阵。每一个二维矩阵用\n
隔开。
程序:
data = []
with open('***.txt','r') as f:
dstr = f.read()
dlist = dstr.split('\n') # split:字符串分隔符
for x in dlist:
data_row = []
dlist2 = x.split(' ') # split:字符串分隔符
for y in dlist2:
dfloat = float(y)
data_row.append(dfloat)
data_row_array = np.array(data_row).reshape([int(len(data_row)/2),2]) # 转换为二维数组
data.append(data_row_array)