60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
"""Parse Stellarium data files."""
|
|
|
|
from collections import namedtuple
|
|
|
|
StarName = namedtuple('StarName', 'hip name')
|
|
|
|
def parse_constellations(lines):
|
|
"""Return a list of constellation outlines.
|
|
|
|
Each constellation outline is a list of edges, each of which is
|
|
drawn between a pair of specific stars::
|
|
|
|
[
|
|
(name, [(star1, star2), (star3, star4), ...]),
|
|
(name, [(star1, star2), (star3, star4), ...]),
|
|
...
|
|
]
|
|
|
|
Each name is a 3-letter constellation abbreviation; each star is an
|
|
integer Hipparcos catalog number. See :ref:`neowise-chart` for an
|
|
example of how to combine this data with the Hipparcos star catalog
|
|
to draw constellation lines on a chart.
|
|
|
|
"""
|
|
constellations = []
|
|
for line in lines:
|
|
line = line.lstrip()
|
|
if line.startswith(b'#'):
|
|
continue
|
|
fields = line.split()
|
|
if not fields:
|
|
continue
|
|
name = fields[0]
|
|
edges = [(int(fields[i]), int(fields[i+1]))
|
|
for i in range(2, len(fields), 2)]
|
|
constellations.append((name.decode('utf-8'), edges))
|
|
return constellations
|
|
|
|
def parse_star_names(lines):
|
|
"""Return the names in a Stellarium ``star_names.fab`` file.
|
|
|
|
Returns a list of named tuples, each of which offers a ``.hip``
|
|
attribute with a Hipparcos catalog number and a ``.name`` attribute
|
|
with the star name. Do not depend on the tuple having only length
|
|
two; additional fields may be added in the future.
|
|
|
|
"""
|
|
names = []
|
|
for line in lines:
|
|
line = line.strip()
|
|
if line == b'' or line.startswith(b'#'):
|
|
continue
|
|
fields = line.split()
|
|
hip, name = fields[0].split(b'|')
|
|
names.append(StarName(
|
|
int(hip),
|
|
name.strip(b'_(")').decode('utf-8'),
|
|
))
|
|
return names
|