csv文件用于存储表格数据,可以用txt和excel打开和编辑。
写入
一次写入一行,注意是使用list来装要输入的一行的内容。
import csv
import numpy as np
out=open("data.csv",'w',newline="")#防止每次输入多空一行
writer=csv.writer(out,dialect='excel')
s=np.asarray([1,2,3,4,5])
a=np.asarray([1,2,3,4,5])
r=np.asarray([1,2,3,4,5])
s1=np.asarray([1,2,3,4,5])
s=np.asarray([1,2,3,4,5])
term=np.asarray([1,2,3,4,5])
for i in rang(3):
writer.writerow([s,a,r,s1,term])
data.csv中输入结果为:
[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]
[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]
[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]
一次多行写入,注意多行写入使用tuple来装每一行内容:
import csv
import numpy as np
out=open("data.csv",'w',newline="")#防止每次输入多空一行
writer=csv.writer(out,dialect='excel')
s=np.asarray([1,2,3,4,5])
a=np.asarray([1,2,3,4,5])
r=np.asarray([1,2,3,4,5])
s1=np.asarray([1,2,3,4,5])
s=np.asarray([1,2,3,4,5])
term=np.asarray([1,2,3,4,5])
writer.writerow([(s,a,r,s1,term),(s,a,r,s1,term),(s,a,r,s1,term)])
data.csv中输入结果为与上面一样。
注意csv写入文件后,我们读出来是str,而不再是原来的类型了。
读取
一种方式是直接读取:
read=open('data.csv','r')
lines=read.readlines()
print(lines)
print(type(lines[0]))
输出:
['[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]\n','[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]\n','[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]\n']
<class 'str'>
所以把str数据转换回numpy去可以这样做的话会花费一些计算:
read=open("data.csv",'r')
lines=read.readlines()#所有行读出来形成一个list
print(lines)
print(type(lines[0]))#第一行,每一行都是字符串
lines_0=lines[0].split(",")#先把第一行按","化成list
print('lines_0:',lines_0[0])#我们取第一行的第一个来还原成numpy
lines_00=lines_0[0].strip("[]")#去掉[]
lines_00=lines_00.split(" ")#去掉数字之间空格
print('lines_00:',lines_00)
a=np.asarray(lines_00)#转换为numpy,注意这一步还没有完,因为这一步是整个list转换为numpy,里面还是字符串
print(a)#这里如果是a[0]是会报错的
print(a.astype(float))#这里才完成了转换
print(a[0])
输出:
['[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5]\n', '[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5]\n', '[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5]\n']
<class 'str'>
lines_0: [1 2 3 4 5]
lines_00: ['1', '2', '3', '4', '5']
['1' '2' '3' '4' '5']
[1. 2. 3. 4. 5.]
1
另一种读取方式是使用pandas来读取,首先在csv文件里加一行,作为DataFrame的列名:
s,a,r,s1,t
[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5]
[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5]
[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5]
读取:
import csv
import pandas as pd
data=pd.read_csv('data.csv')
print(data['s'])#输出s列
print(data.iloc[0])#输出第0行
print(data.iloc[0][0])#输出输出第0行第0个
print(type(data.iloc[0][0]))
输出:
0 [1 2 3 4 5]
1 [1 2 3 4 5]
2 [1 2 3 4 5]
Name: s, dtype: object
s [1 2 3 4 5]
a [1 2 3 4 5]
r [1 2 3 4 5]
s1 [1 2 3 4 5]
t [1 2 3 4 5]
Name: 0, dtype: object
[1 2 3 4 5]
<class 'str'>
可以看出读出来的还是str,还是需要转换为numpy