В каком двоичном формате экспортируется двоичная сетка и как его можно преобразовать в ascii?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 В каком двоичном формате экспортируется двоичная сетка и как его можно преобразовать в ascii?

Сообщение Anonymous »

Я создал несколько больших сеток с помощью Gmsh через API Python. Файлы ASCII могут иметь размер в гигабайтах. Поскольку двоичные файлы меньше по размеру и быстрее читаются, я настроил Gmsh для сохранения файлов сетки в двоичном формате. Моя текущая проблема заключается в том, чтобы выяснить, как прочитать эту двоичную сетку обратно в Python в интерпретируемом формате.
Какую двоичную кодировку использует Gmsh для файлов сохранения и как их можно прочитать обратно в Python в интерпретируемой форме.
Вот упрощенная версия кода руководства Gmsh 1 (ссылка), модифицированная для сохранения сетки в двоичном формате.
< pre class="lang-py Prettyprint-override">

Код: Выделить всё

import gmsh
import sys

gmsh.initialize(argv=["","-bin"])

gmsh.model.add("t1")

lc = 1e-2
gmsh.model.geo.addPoint(0, 0, 0, lc, 1)
gmsh.model.geo.addPoint(.1, 0, 0, lc, 2)
gmsh.model.geo.addPoint(.1, .3, 0, lc, 3)
p4 = gmsh.model.geo.addPoint(0, .3, 0, lc)

gmsh.model.geo.addLine(1, 2, 1)
gmsh.model.geo.addLine(3, 2, 2)
gmsh.model.geo.addLine(3, p4, 3)
gmsh.model.geo.addLine(4, 1, p4)

gmsh.model.geo.addCurveLoop([4, 1, -2, 3], 1)
gmsh.model.geo.addPlaneSurface([1], 1)

gmsh.model.geo.synchronize()

gmsh.model.addPhysicalGroup(1, [1, 2, 4], 5)
gmsh.model.addPhysicalGroup(2, [1], name="My surface")

gmsh.model.mesh.generate(2)
gmsh.write("t1_binary.msh")
gmsh.finalize()
Мой первоначальный наивный подход заключался в том, чтобы прочитать файл в двоичном формате и попробовать .decode(), но этот подход терпит неудачу, как только он проходит строку $Entities .

Код: Выделить всё

mesh_file = []
with open("t1_binary.msh", "rb") as f:
for line in f.readlines():
print(line)
mesh_file.append(line.decode())
При сбое я получаю сообщение об ошибке UnicodeDecodeError: кодек 'utf-8' не может декодировать байт 0x9a в позиции 72: неверный начальный байт.
Что касается комментария о функции записи, да, я попробовал изучить этот код. Функция write gmsh.py (ссылка) вызывает lib.gmshWrite (я думаю, что это: ссылка), которая является C++. Эта функция C++ вызывает gmsh::write (я думаю, это: ссылка), которая, похоже, вызывает gmshWrite, совершая полный круг. Я не уверен, что вижу неправильные определения функций.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ed-to-asci
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»