简体   繁体   English

如何从 Python 中的 .dat 文件中读取浮点数组?

[英]How to read an array of floats from .dat file in Python?

I have.dat file with this type of text我有这种类型的文本的 .dat 文件

Example: АqMA ЅA Ђ‰ї HB HB MA @ЅA Е€ї HB HB ЂXLA ЂЅA U‡ї HB HB АFA U5ЅA Е€ї HB HB @ю@A ЅA ё€ї HB HB [VA ЅA ±“‡ї HB HB @3MA ЅA U=‰ї HB HB А KA «JЅA Ђ‰ї HB HB ЂdJA;1ЅA р‡ї HB HB АZA «jЅA `†ї HB HB АFA ±ЅA Uе†ї HB HB А¬XA ЅA bЗ€ї HB HB АHA OlЅA «2€ї HB HB А5WA UЅA vB‰ї HB HB АN>A ЅA Uu€ї HB HB >FA UuЅA Ы†ї HB HB А^A ±ЅA «2€ї HB HB А”\A UuЅA OL€ї HB HB ЂГOA OlЅA р‡ї HB HB @аEA UЅA Ђ‰ї HB HB @QHA OlЅA р‡ї HB HB АeOA ЅA vB‰ї HB HB цQA ЕNЅA Ђ‰ї HB HB @QHA ЂЅA Ђ‰ї HB HB,IA ЂЅA Ђ‰ї HB HB @эUA «*ЅA Ђ‰ї HB HB DEA ЕNЅA Ђ‰ї HB HB ЂҐTA ЂЅA Ђ‰ї HB HB АоMA ЂЅA «ъ€ї HB HB @ TA ЂЅA Ђ‰ї HB HB А0CA ЂЅA Ђ‰ї HB HB @KIA ЂЅA Ђ‰ї HB HB ЂXA ЂЅA Ђ‰ї HB HB АYQA «jЅA Ђ‰ї HB HB @жDA;1ЅA Ђ‰ї HB HB IYA ЂЅA Ђ‰ї HB HB @oCA ЂЅA Ђ‰ї HB HB ЂFOA ЂЅA Ђ‰ї HB HB ТWA Щ ЅA Ђ‰ї HB HB OA UuЅA Ђ‰ї HB HB @WGA etc...示例: АqMA ЅA Ђ‰ї HB HB MA @ЅA Е€ї HB ЂXLA ЂЅA U‡ї HB HB АFA U5ЅA Е€ї HB HB @ю@A ЅA ё€ї HB HB [VA ЅA ±“‡ї HB HB @3MA ЅA U=‰ї HB HB А KA «JЅA Ђ‰ї HB HB ЂdJA;1ЅA р‡ї HB HB АZA «jЅA `†ї HB HB АFA ±ЅA Uе†ї HB HB А¬XA ЅA bЗ€ї HB HB АHA OlЅA «2€ї HB HB А5WA UЅA vB‰ї HB HB АN>A ЅA Uu€ї HB HB >FA UuЅA Ы†ї HB HB А^A ±ЅA «2€ї HB HB А”\A UuЅA OL €ї HB HB ЂГOA OlЅA р‡ї HB HB @аEA UЅA Ђ‰ї HB HB @QHA OlЅA р‡ї HB HB АeOA ЅA vB‰ї HB HB цQA ЕNЅA Ђ‰ї HB HB @QHA ЂЅA Ђ‰ї HB HB, IA ЂЅA Ђ‰ї HB HB @эUA «*ЅA Ђ‰ї HB HB DEA ЕNЅA Ђ‰ї HB HB ЂҐTA ЂЅA Ђ‰ї HB HB АоMA ЂЅA «ъ€ї HB HB @ TA ЂЅA Ђ‰ї HBЂHB А0CA ЂЅA ‰ї HB HB @KIA ЂЅA Ђ‰ї HB HB ЂXA ЂЅA Ђ‰ї HB HB АYQA «jЅA Ђ‰ї HB HB @жDA;1ЅA Ђ‰ї HB HB IYA ЂЅA Ђ‰ї HB HB @oCA ЂЅA Ђ‰ї HB HB ЂFOA ЂЅA Ђ‰ї HB HB ТWA Щ ЅA Ђ‰ї HB HB OA UuЅA Ђ‰ї HB HB @WGA等...

It should be matrix (..., 10) with correct float numbers, but idk how to do it.它应该是具有正确浮点数的矩阵 (..., 10),但不知道该怎么做。 I tried to find what kind of record it is, but i couldn't find anything same:(我试图找到它是什么类型的记录,但我找不到相同的东西:(

Pls help请帮忙

ps ps

in matlab it magicaly works fine, but i really can't do the same in Python在 matlab 它神奇地工作正常,但我真的不能在 Python 中做同样的事情

FileID = fopen('sample.dat' ,'r');
Data = fread(FileID,[10,inf],'float')';

matlab图片中的数据

The data is simply a bunch of floats represented by their actual binary data rather than text.数据只是一堆由它们的实际二进制数据而不是文本表示的浮点数。 Numpy is probably the fastest and easiest by using: Numpy可能是最快和最简单的使用:

numpy.fromfile(filepath, dtype=float).reshape([-1,10])

It may be a good exercise to learn how binary data is represented by using the struct library.学习如何使用struct库表示二进制数据可能是一个很好的练习。 Here's a quick example to try and read through:这是一个尝试通读的快速示例:

with open(filepath, 'rb') as datafile:
    my_array = list()
    for i, value in enumerate(struct.iter_unpack('f', datafile)):
        if i%10 == 0: #start a new row every 10 columns
            my_array.append(list())
        my_array[-1].append(value)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM