This guide will help you get up and running with PyP6Xer quickly.
pip install PyP6XERgit clone https://github.com/HassanEmam/PyP6Xer.git
cd PyP6Xer
pip install -e .XER (eXchange ERport) files are tab-delimited text files exported from Primavera P6. They contain comprehensive project data including:
- Project metadata and settings
- Work Breakdown Structure (WBS)
- Activities and their properties
- Resource definitions and assignments
- Calendar definitions
- Activity relationships
- Custom codes and fields
PyP6Xer follows an object-oriented design where each XER element type is represented by a Python class:
- Reader: Main entry point for parsing XER files
- Project: Represents a P6 project
- Task: Represents project activities
- Resource: Represents resources (labor, material, etc.)
- WBS: Work Breakdown Structure elements
- Calendar: Working time definitions
Here's a simple example that loads an XER file and displays basic project information:
from xerparser.reader import Reader
# Load the XER file
xer_file = Reader("sample.xer")
# Display basic information
print(f"Found {xer_file.projects.count} project(s)")
# Iterate through projects
for project in xer_file.projects:
print(f"\nProject: {project.proj_short_name}")
print(f"Project Name: {project.proj_name}")
print(f"Start Date: {project.plan_start_date}")
print(f"Finish Date: {project.plan_end_date}")
print(f"Number of Activities: {len(project.activities)}")project = xer_file.projects[0] # Get first project
# Basic properties
print(f"Project ID: {project.proj_id}")
print(f"Short Name: {project.proj_short_name}")
print(f"Full Name: {project.proj_name}")
print(f"Manager: {project.proj_mgr}")
# Dates
print(f"Data Date: {project.last_recalc_date}")
print(f"Planned Start: {project.plan_start_date}")
print(f"Planned Finish: {project.plan_end_date}")
# Status
print(f"Project Status: {project.status_code}")# Get all activities in a project
activities = project.activities
print(f"Total Activities: {len(activities)}")
# Filter activities by status
active_activities = [act for act in activities if act.status_code == "TK_Active"]
print(f"Active Activities: {len(active_activities)}")
# Find critical path activities
critical_activities = [act for act in activities if act.driving_path_flag == "Y"]
print(f"Critical Activities: {len(critical_activities)}")for activity in project.activities[:5]: # First 5 activities
print(f"\nActivity: {activity.task_name}")
print(f" ID: {activity.task_code}")
print(f" Duration: {activity.target_drtn_hr_cnt} hours")
print(f" Status: {activity.status_code}")
print(f" % Complete: {activity.phys_complete_pct}%")
print(f" Start: {activity.act_start_date}")
print(f" Finish: {activity.act_end_date}")# Get all relationships
relationships = xer_file.relations
print(f"Total Relationships: {len(relationships)}")
# Find predecessors for a specific activity
activity_id = 12345
predecessors = [rel for rel in relationships if rel.task_id == activity_id]
for pred in predecessors:
print(f"Predecessor: {pred.pred_task_id} -> {pred.task_id}")
print(f" Type: {pred.pred_type}")
print(f" Lag: {pred.lag_hr_cnt} hours")# Access all resources
resources = xer_file.resources
print(f"Total Resources: {len(resources)}")
for resource in resources[:5]: # First 5 resources
print(f"\nResource: {resource.rsrc_name}")
print(f" ID: {resource.rsrc_id}")
print(f" Type: {resource.rsrc_type}")
print(f" Short Name: {resource.rsrc_short_name}")# Get activity-resource assignments
assignments = xer_file.activityresources
for assignment in assignments[:5]: # First 5 assignments
activity = assignment.task_id
resource = assignment.rsrc_id
print(f"Activity {activity} -> Resource {resource}")
print(f" Budgeted Units: {assignment.target_qty}")
print(f" Actual Units: {assignment.act_reg_qty}")# Access Work Breakdown Structure
wbs_elements = xer_file.wbss
print(f"Total WBS Elements: {len(wbs_elements)}")
# Find root WBS elements (no parent)
root_elements = [wbs for wbs in wbs_elements if not wbs.parent_wbs_id]
for wbs in root_elements:
print(f"Root WBS: {wbs.wbs_name}")
print(f" Short Name: {wbs.wbs_short_name}")
print(f" Project Node: {wbs.proj_node_flag}")# Access calendars
calendars = xer_file.calendars
for calendar in calendars:
print(f"Calendar: {calendar.clndr_name}")
print(f" Type: {calendar.clndr_type}")
print(f" Hours per Day: {calendar.day_hr_cnt}")
print(f" Hours per Week: {calendar.week_hr_cnt}")Always wrap file operations in try-catch blocks:
try:
xer_file = Reader("project.xer")
print("File loaded successfully")
except FileNotFoundError:
print("XER file not found")
except Exception as e:
print(f"Error loading file: {e}")- Explore the Examples for more advanced usage patterns
- Check the API Reference for complete class documentation
- Learn about {ref}
filtering and querying <filtering-data>techniques