PYTHON读取某格式的编码并且解析

对于文件类型,可以用matlab的fopen和fread函数进行读取,其代码如下

fid = fopen('XXX.CAN0');
[data,count]=fread(fid);
fclose(fid);

现在想找到个方法,在python中调用fopen和fread函数,而在python中只有open and read函数,采用如下的代码

# -*- coding: utf-8 -*-
f=open('XXX.CAN0',encoding='ISO-8859-1')
data1=f.read()
f.close()
print(data1)

则出现乱码,现在尝试在python中引入fopen和fread函数,进行调用。但是在网上找了比较久,并没有找到合适的,发现有个有意思的posix,其中导入os即可读取,但是按照官方文档,建议说直接采用open函数更有效,于是重新采用open函数读取,采用二进制读法:

data =open('C:/Users\Administrator\Desktop\马\XXX.CAN0','rb')
print(data.read())
data.close()

截取部分读取结果来看

x01\x88x\x00U\x00o,\xfc\xff\xfb\xff\x02\x01\x03\x1f\xe0\x07\x0e\x02:\xea!{\

读取结果中包含非16进制字符,标点符号,括号等,应该是open函数中某些设置项目不太对,应该是字节长度设置问题?可以尝试open时候8个字节一次进行打开,(暂时不是这样子)。网上看个论文,发现是UCS-2 LE编码,于是在网上找到个文章专门解析此编码文件

# -*- coding: cp936 -*-
'''
data =open('C:/Users\Administrator\Desktop\马\XXX.CAN0','rb')
data_r=data.read()
data.close()
print(data_r[0:5])
'''

import os
import codecs
def parseFile(filepath):
    try:
        lineList = []  # 存放每一行的内容
        with open(filepath, 'r') as fp:
            line = fp.read()
            if line.startswith('C:/Users\Administrator\Desktop\马\XXX.CAN0'):
                encoding = 'utf-16-le'
                fp2 = codecs.open(filepath, 'r', encoding)
                lineList = fp2.readlines()
                fp2.stream.close()
        for i in lineList:  # 打印每一行
            print(i)
    except Exception:
        return
parseFile('C:/Users\Administrator\Desktop\马\XXX.CAN0')

感觉还差的很远,暂时搁置,稍后再看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值