一、使用NumPy读写文本文件
在数据分析中,经常需要从文件中读取数据或将数据写入文件,常用的存储文件的格式有文本文件、CSV格式文件、二进制格式文件和多维数据文件等。
1.将1维或2维数组写入TXT文件或CSV格式文件 在NumPy中,使用savetxt()函数可以将1维或2维数组写入后缀名为txt或csv的文件.函数格式为:
1
|
* * numpy.savetxt(fname,array,fmt = '%.18e' ,delimiter = None ,newline = '\n' , header = ' ', footer=' ', comments=' # ', encoding=None)**
|
主要参数:
fname:文件、字符串或产生器,可以是.gz 或.bz2 的压缩文件
array:存入文件的数组(一维数组或者二维数组)
fmt:写入文件的格式,如:%d,%.2f,%.18e,默认值是%.18e 可选项
delimiter: 分隔符,通常情况是str可选
header:将在文件开头写入的字符串
footer:将在文件尾部写入的字符串
comments: 将附加到header和footer字符串的字符串,以将其标记为注释。
默认值:'#' encoding:用于编码输出文件的编码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import numpy as np
arr = np.arange( 12 ).reshape( 3 , 4 )
#fmt缺省取%.18e(浮点数)
#分割符默认是空格,写入文件保存在当前目录
np.savetxt( 'test-1.txt' ,arr)
#fmt:%d 写入文件的元素是十进制整数,分割符为逗号",",写入文件保存在当前目录
np.savetxt( 'test-2.txt' ,arr,fmt = '%d' ,delimiter = ',' )
#在test-3.txt文件头部和尾部增加注释,头部 #test-3,尾部 # 数据写入注释,写入文件的元素是字符串
np.savetxt( 'test-3.txt' ,arr,fmt = '%s' ,delimiter = ',' ,header = \
'test-3' ,footer = '测试数据' ,encoding = 'utf-8' )
#在test-4.txt文件头部加##test-4注释
np.savetxt( 'test-4.txt' ,arr,fmt = '%f' ,delimiter = ',' ,header =
'test-4' ,comments = '###' )
#将arr数组保存为csv文件
np.savetxt( 'test-1.csv' ,arr,fmt = '%d' ,header = 'test-1' )
|
2.读取TXT文件和CSV格式文件 在NumPy中,读取TXT文件和CSV格式文件的函数是loadtxt(),函数格式:
numpy.loadtxt(fname,dtype=type'float'>,comments='#',delimiter=None, converters=None,skiprows=0,usecols=None,unpack=False,ndmin=0,encoding=‘bytes')
#参数说明:
fname:被读取的文件名(文件的相对地址或者绝对地址)
dtype:指定读取后数据的数据类型
comments: 跳过文件中指定参数开头的行(即不读取)
delimiter:指定读取文件中数据的分割符
converters: 对读取的数据进行预处理
skiprows:选择跳过的行数
usecols:指定需要读取的列
unpack:选择是否将数据进行向量输出
encoding:对读取的文件进行预编码
1
2
3
4
5
6
|
a = np.loadtxt( 'test-1.txt' )
#读入当前目录下的文件 test-1.txt
print (a)
[[ 0. 1. 2. 3. ]
[ 4. 5. 6. 7. ]
[ 8. 9. 10. 11. ]]
|
1
2
3
4
5
|
# skiprows:指跳过前1行, 如果设置skiprows=2, 就会跳过前两行,数据类型设置为整型.
a = np.loadtxt( 'test-1.txt' , skiprows = 1 , dtype = int )
print (a)
[[ 4 5 6 7 ]
[ 8 9 10 11 ]]
|
1
2
3
4
5
6
7
8
9
|
# comment, 如果行的开头为#就会跳过该行
a = np.loadtxt( 'test-4.txt' , skiprows = 2 , comments = '#' ,delimiter = ',' )
b = np.loadtxt( 'test-4.txt' ,comments = '#' ,delimiter = ',' )
print (a,b,sep = '\n' )
[[ 4. 5. 6. 7. ]
[ 8. 9. 10. 11. ]]
[[ 0. 1. 2. 3. ]
[ 4. 5. 6. 7. ]
[ 8. 9. 10. 11. ]]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# usecols:指定读取的列,若读取0,2两列
aa = np.loadtxt( 'test-3.txt' ,dtype = int , skiprows = 1 ,delimiter = ',' ,usecols = ( 0 , 2 ))
#unpack是指会把每一列当成一个向量输出, 而不是合并在一起。
(a, b) = np.loadtxt( 'test-2.txt' , dtype = int , skiprows = 1 ,
comments = '#' , delimiter = ',' ,
usecols = ( 0 , 2 ), unpack = True )
print (aa,a, b,sep = '\n' )
[[ 0 2 ]
[ 4 6 ]
[ 8 10 ]]
[ 4 8 ]
[ 6 10 ]
#读取csv文件
aa = np.loadtxt( 'test-1.csv' ,skiprows = 1 )
print (aa)
[[ 0. 1. 2. 3. ]
[ 4. 5. 6. 7. ]
[ 8. 9. 10. 11. ]]
|
二、使用NumPy读写二进制文件
1.使用save()或savez()函数写二进制格式文件
save函数将数组以未压缩的原始二进制格式保存在扩展名为.npy的文件中。会自动处理元素类型和形状等信息。
savez函数将多个数组压缩到一个扩展名为npz的文件,其中每个文件都是一个save()保存的npy文件,文件名和数组名相同
save()或savez()函数的格式:
1
2
|
numpy.save( file ,array)
numpy.savez( file ,array)
|
2.使用load()函数读取二进制格式文件
load()函数的格式: numpy.load(file)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import numpy as np
a = np.arange( 12 ).reshape( 3 , 4 )
print ( '原数组a:\n' ,a)
np.save( 'arr1.npy' , a) #将数据存储为npy,保存时可以省略扩展名,默认.npy
c = np.load( 'arr1.npy' ) #读取arr1.npy的数据,读取数据时不能省略 .npy
print ( '读取后的数据:\n' ,c)
ar = np.arange( 6 ).reshape( 3 , 2 )
print ( '保存前的数组:' ,a,ar,sep = '\n' )
np.savez( 'arr2.npz' ,a,ar) #多数组存储,默认文件名.npz
b = np.load( 'arr2.npz' )
print ( '读取后的数据:' )
print (b[ 'arr_0' ],b[ 'arr_1' ],sep = '\n' )
|
原数组a:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
读取后的数据:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
保存前的数组:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[0 1]
[2 3]
[4 5]]
读取后的数据:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[0 1]
[2 3]
[4 5]]
1
2
3
4
5
6
7
8
|
for i in b.items():
print (i)
( 'a' , array([[ 0 , 1 , 2 , 3 ],
[ 4 , 5 , 6 , 7 ],
[ 8 , 9 , 10 , 11 ]]))
( 'ar' , array([[ 0 , 1 ],
[ 2 , 3 ],
[ 4 , 5 ]]))
|
以上就是python使用NumPy文件的读写操作的详细内容,更多关于python使用NumPy读写文件的资料请关注服务器之家其它相关文章!
原文链接:https://blog.csdn.net/ChristensonLee/article/details/115427532