首页 / 爬虫

python numpy中如何读写文件

时间:2023-06-15 14:20:07阅读:0

python numpy中如何读写文件

  数据分析中,经常需要从文件中读取数据或将数据写入文件,常用的存储文件的格式有文本文件、CSV格式文件、二进制格式文件和多维数据文件等。

  1.将1维或2维数组写入TXT文件或CSV格式文件 在NumPy中,使用savetxt()函数可以将1维或2维数组写入后缀名为txt或csv的文件.函数格式为:

**numpy.savetxt(fname,array,fmt='%.18e',delimiter=None,newline='\n', 
header='', footer='', comments='# ', encoding=None)**

  numpy 主要参数

  •   fname:文件、字符串或产生器,可以是.gz 或.bz2 的压缩文件

  •   array:存入文件的数组(一维数组或者二维数组)

  •   fmt:写入文件的格式,如:%d,%.2f,%.18e,默认值是%.18e 可选项

  •   delimiter: 分隔符,通常情况是str可选

  •   header:将在文件开头写入的字符串

  •   footer:将在文件尾部写入的字符串

  •   comments: 将附加到header和footer字符串的字符串,以将其标记为注释。

  •   默认值:'#' encoding:用于编码输出文件的编码。

  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:对读取的文件进行预编码

  a = np.loadtxt('test-1.txt')
  #读入当前目录下的文件 test-1.txt
  print(a)
  [[ 0. 1. 2. 3.]
  [ 4. 5. 6. 7.]
  [ 8. 9. 10. 11.]]
  # skiprows:指跳过前1行, 如果设置skiprows=2, 就会跳过前两行,数据类型设置为整型.
  a = np.loadtxt('test-1.txt', skiprows=1, dtype=int)
  print(a)
  [[ 4 5 6 7]
  [ 8 9 10 11]]
  # 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.]]
  # 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()函数的格式:

  •   numpy.save(file,array)

  •   numpy.savez(file,array)

  2.使用load()函数读取二进制格式文件

  load()函数的格式: numpy.load(file)

  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]]
  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]]))


本站文章均来自互联网,仅供学习参考,如有侵犯您的版权,请邮箱联系我们删除!

猜你喜欢