python 文件格式转换_在python中肿么将gtf格式的文件转换成gff格式的?

1.python 二进制文件的读写

只讨论二进制文件的读写。

以二进制的形式打开文件

with open(filename , 'wb') as fd :

#do with fd

fd.write(strobject)#二进制strobject写入文件

fd.read(byte_len)#读取byte_len字节数据

wb:表示以二进制写的方式打开文件

rb :表示以二进制读的方式打开文件

2.关于进制的转换

需要使用到struct进行打包成二进制字符串或者相应的解包成元组。

#根据format形式,把后面的变量v1,v2,...打包成字节对象形式

byte_objects = struct.pack(format,v1,v2,...)

#根据format形式,从buffer中解包出数据,返回值的形式是元组

value_tuple = struct.unpack(format,buffer)

3.读写几种数据类型的例子

#写入文件

with open('test.data','wb') as fd:

i = 1

bi = struct.pack('i',i) #'i'表示对int类型进行打包

fd.write(bi)

f = 2.1

bf = struct.pack('f',f) #'f'表示对float类型进行打包

fd.write(bf)

d = 3.1

bd = struct.pack('d',d) #'d'表示对double类型进行打包

fd.write(bd)

l = 4L

bl = struct.pack('l',l)#'l'表示对long类型进行打包

fd.write(bl)

#读取文件

with open('test.data','rb') as fd:

byte_len = 4

bi = fd.read(byte_len) #读取int类型的4个字节的二进制数据

print struct.unpack('i',bi) #解压成原来的int类型

bf = fd.read(byte_len) #读取float类型的4个字节的二进制数据

print struct.unpack('f',bf) #解压成原来的float类型

byte_len = 8

bd = fd.read(byte_len) #读取double类型的8个字节的二进制数据

print struct.unpack('d',bd) #解压成原来的double类型

bl = fd.read(byte_len) #读取long类型的8个字节的二进制数据

print struct.unpack('l',bl)#解压成原来的long类型

关于C/C++里面的数据类型在Python里面对应的数据类型以及占用的字节大小,参考下面的网站。

https://docs.python.org/3/library/struct.html#format-characters

4.测试关于c++读去python生成的文件

/**c++ ifstream**/

void readifstream(const char* filename){

cout << "ifstream " << endl;

ifstream ifs(filename,ifstream::binary);

if(!ifs){

cerr << "open file error " << endl;

exit(0);

}

int i;

float f;

double d;

long l;

ifs.read((char*)&i,sizeof(i));

ifs.read((char*)&f,sizeof(f));

ifs.read((char*)&d,sizeof(d));

ifs.read((char*)&l,sizeof(l));

ifs.close();

cout <<"i="<< i << " f="<< f <<" d="<< d <<" l=" << l << endl;

cout << "==============cout======================" << endl;

}

/**c FILE*/

void readFILE(const char* filename){

printf("readFILE\n");

FILE * fid = fopen(filename,"rb");

if(!fid){

perror("open file error \n");

exit(0);

}

const int size = 1;

int i;

float f;

double d;

long l;

fread((char*)&i,sizeof(i),size,fid);

fread((char*)&f,sizeof(f),size,fid);

fread((char*)&d,sizeof(d),size,fid);

fread((char*)&l,sizeof(l),size,fid);

fclose(fid);

printf("i=%d f=%.2f d=%.2lf l=%ld\n",i,f,d,l);

printf( "================printf====================\n");

}

取消

评论

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值