欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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打开都是换行的 而且不影响读取

保存数据截图

python读写文件数据(换行写入以及按行读取;读写字节数据)

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],所以我们取后面七位,然后再在前面加入正负号即可