对于文件类型,可以用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')
感觉还差的很远,暂时搁置,稍后再看