L'obtention de mal à zéro les valeurs avec numpy fromfile lors de la lecture de fichiers binaires

StackOverflow https://stackoverflow.com//questions/25004225

  •  20-12-2019
  •  | 
  •  

Question

Je suis en train de lire un fichier binaire avec Python.C'est le code que j'utilise:

fb = open(Bin_File, "r")
a = numpy.fromfile(fb, dtype=numpy.float32)

Cependant, j'obtiens des valeurs égales à zéro à la fin du tableau.Par exemple, pour le cas où nrows=296 et ncol=439 et comme un résultat, len(a)=296*439, J'obtiens des valeurs zéro pour a[-922:].Je sais que ces valeurs noData (-9999 dans cet exemple) à partir d'une confiance morceau de code dans R.Quelqu'un sait pourquoi j'obtiens ces non-sens des zéros?

P. S:Je ne suis pas sûr que c'est lié à pas, mais len(a) est nrows*ncols+2!Je dois me débarrasser de ces deux à l'aide de a = a[0:-2] de sorte que lorsque je les remodeler en lignes et en colonnes à l'aide de a_reshape = a.reshape(nrows, ncols) Je n'ai pas d'erreur.

Était-ce utile?

La solution

Lors de l'ouverture d'un fichier pour la lecture binaire, vous devez utiliser le mode "rb" au lieu de "r".

Voici un petit historique de la docs.Sur linux, vous n'avez pas besoin de l' "b" mais il l'habitude de mal.Sur les machines Windows, vous devez utiliser "rb" pour les fichiers binaires.

Notez également que les deux entrées supplémentaires que vous obtenez est une commune bug/feature lors de l'utilisation de la "non formaté" binary format de sortie de Fortran.Chaque écriture de déclaration donnée, dans ce mode de produire un dossier qui est entouré par deux blocs de 4 octets.

Ces blocs représentent des entiers de la liste le nombre d'octets dans le bloc de données sans mise en forme.Par exemple, [223] [223 octets de données] [223].

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top