python读写文件数据(换行写入以及按行读取;读写字节数据)
程序员文章站
2022-06-11 14:37:22
...
我需要把一个2*50000的数据保存到本地,然后再从其中读取
1.写入数据 acc_array是一个2*50000的二维数组
f=open('PATH/test.txt','w')
for j in range(50000):
f.write(str(acc_array[j][0]))
f.write(' ')
f.write(str(acc_array[j][1])+'\n')
f.close()
这里的换行保存,打开记事本文件的时候发现并没有换行,没关系,以word或者notepad打开都是换行的 而且不影响读取
保存数据截图
2.读取数据,按照行读取
我这里是把每一行的两个数字读取出来,相除后产生一个新数组
import numpy as np
file=open('test.txt','r')
#a=[[0]*2 for i in range(50000)]
a=[]
m=''
n=''
for j in range(50000):
line=file.readline()
print(line)
for i in range(len(line)):
if line[i]>='0' and line[i]<='9':
m=m+line[i]
else:
break
for t in range(i,len(line)):
if line[t]>='0' and line[t]<='9':
n=n+line[t]
print(m,'*******',n)
a.append(float((1.0*int(n))/(1.0*int(m))))
print(a[j])
m=''
n=''
if not line:
break
print(line)
print(np.argsort(a))
3.写入byte数据
我想写入一串字节数据‘0110101101110001010100100’到文件,可以用以下方式(需要import struct)
savedBinFile = open('/home/ximao/test.bin', "wb"); # open a file, if not exist, create it
for i in range(len(bt) // 8):
if bt[8 * i] == '0':
savedBinFile.write(struct.pack('b', int(bt[i * 8 + 1:(i + 1) * 8], 2)));
else:
savedBinFile.write(struct.pack('b', -int(bt[i * 8 + 1:(i + 1) * 8], 2)));
for i in range(len(wb) // 8):
if wb[8 * i] == '0':
savedBinFile.write(struct.pack('b', int(wb[i * 8 + 1:(i + 1) * 8], 2)));
else:
savedBinFile.write(struct.pack('b', -int(wb[i * 8 + 1:(i + 1) * 8], 2)));
savedBinFile.close()
这里每次写入8位bit数据。即一个字节,之所以判断第一位是否为0是因为一个字节能表示的数位[-128,127],第一位是符号为,但是如果我们每次int(bt[i * 8 :(i + 1) * 8], 2)),这样8bit数据表示的整数实际上会超过[-128,127],所以我们取后面七位,然后再在前面加入正负号即可上一篇: 冬季宝宝如何晒太阳 宝宝晒太阳注意事项