Load and update enum values
bpy.props.EnumProperty can be of static nature (as in your example) or dynamic.

bpy.props.EnumProperty(items, name="", description="", default=None, options={'ANIMATABLE'}, update=None, get=None, set=None)


A dynamic enum is one whose items are calculated when clicked on, for example.

def items_file(self, context):
    items = []
    # open file
    # construct a tuple
    # append to items
    return items


Now whenever you click the enum property in the Panel, the items will be fetched from the callback.

Note:


The default parameter must be None for dynamic enum
In the callback, the items must always be assigned to a local variable, populated and then returned (to avoid crash: and this is a documented bug)


https://docs.blender.org/api/current/bpy.props.html