Skip to main content
The PROVINCIA class contains constants representing all 52 Spanish provinces and autonomous cities, along with a Provincia class for working with province data.

Overview

PROVINCIA provides constants for all provinces in Spain, including the autonomous cities of Ceuta and Melilla. Each province has a name and a two-digit code used in official Spanish registries.

Provincia Class

The Provincia class represents a single Spanish province.

Constructor

Provincia(name, code)
name
str
required
Province name (e.g., “Madrid”, “Barcelona”)
code
int
required
Province code (1-52)

Properties

name
str
Province name
code
str
Two-digit province code (e.g., “01”, “28”, “52”)

Methods

# String representation
str(provincia)  # Returns province name

# Comparison
provincia1 == provincia2  # Compare by name and code
provincia == "Madrid"  # Compare with string (case-insensitive)
provincia1 < provincia2  # Compare alphabetically by name

Province Constants

Northern Spain

ALAVA
Provincia
Álava (code: 01) - Also accessible as ARABA
ASTURIAS
Provincia
Asturias (code: 33)
CANTABRIA
Provincia
Cantabria (code: 39)
GUIPUZCOA
Provincia
Guipúzcoa (code: 20) - Also accessible as GIPUZKOA
LA_RIOJA
Provincia
La Rioja (code: 26)
NAVARRA
Provincia
Navarra (code: 31)
VIZCAYA
Provincia
Vizcaya (code: 48) - Also accessible as BIZKAIA

Galicia

LA_CORUNA
Provincia
La Coruña (code: 15) - Also accessible as A_CORUNA
LUGO
Provincia
Lugo (code: 27)
ORENSE
Provincia
Orense (code: 32) - Also accessible as OURENSE
PONTEVEDRA
Provincia
Pontevedra (code: 36)

Catalonia

BARCELONA
Provincia
Barcelona (code: 08)
GERONA
Provincia
Gerona (code: 17) - Also accessible as GIRONA
LERIDA
Provincia
Lérida (code: 25) - Also accessible as LLEIDA
TARRAGONA
Provincia
Tarragona (code: 43)

Aragon

HUESCA
Provincia
Huesca (code: 22)
TERUEL
Provincia
Teruel (code: 44)
ZARAGOZA
Provincia
Zaragoza (code: 50)

Valencian Community

ALICANTE
Provincia
Alicante (code: 03)
CASTELLON
Provincia
Castellón (code: 12)
VALENCIA
Provincia
Valencia (code: 46)

Castile and León

AVILA
Provincia
Ávila (code: 05)
BURGOS
Provincia
Burgos (code: 09)
LEON
Provincia
León (code: 24)
PALENCIA
Provincia
Palencia (code: 34)
SALAMANCA
Provincia
Salamanca (code: 37)
SEGOVIA
Provincia
Segovia (code: 40)
SORIA
Provincia
Soria (code: 42)
VALLADOLID
Provincia
Valladolid (code: 47)
ZAMORA
Provincia
Zamora (code: 49)

Castile-La Mancha

ALBACETE
Provincia
Albacete (code: 02)
CIUDAD_REAL
Provincia
Ciudad Real (code: 13)
CUENCA
Provincia
Cuenca (code: 16)
GUADALAJARA
Provincia
Guadalajara (code: 19)
TOLEDO
Provincia
Toledo (code: 45)

Madrid

MADRID
Provincia
Madrid (code: 28)

Extremadura

BADAJOZ
Provincia
Badajoz (code: 06)
CACERES
Provincia
Cáceres (code: 10)

Andalusia

ALMERIA
Provincia
Almería (code: 04)
CADIZ
Provincia
Cádiz (code: 11)
CORDOBA
Provincia
Córdoba (code: 14)
GRANADA
Provincia
Granada (code: 18)
HUELVA
Provincia
Huelva (code: 21)
JAEN
Provincia
Jaén (code: 23)
MALAGA
Provincia
Málaga (code: 29)
SEVILLA
Provincia
Sevilla (code: 41)

Murcia

MURCIA
Provincia
Murcia (code: 30)

Balearic Islands

ISLAS_BALEARES
Provincia
Islas Baleares (code: 07) - Also accessible as ILLES_BALEARS

Canary Islands

LAS_PALMAS
Provincia
Las Palmas (code: 35)
SANTA_CRUZ_DE_TENERIFE
Provincia
Santa Cruz de Tenerife (code: 38)

Autonomous Cities

CEUTA
Provincia
Ceuta (code: 51)
MELILLA
Provincia
Melilla (code: 52)

Static Methods

from_title()

Convert a province title/name to a PROVINCIA constant.
PROVINCIA.from_title(title)
title
str
required
Province name (case-insensitive, accents removed)
Returns: Provincia - The matching province object Raises: ValueError - If province name is not found
Example
from bormeparser.provincia import PROVINCIA

# Get province from title
provincia = PROVINCIA.from_title('Madrid')
print(provincia.code)  # "28"

# Works with underscores
provincia = PROVINCIA.from_title('CIUDAD_REAL')
print(provincia.name)  # "Ciudad Real"

# Special case for Basque name
provincia = PROVINCIA.from_title('ARABA/ÁLAVA')
print(provincia.name)  # "Álava"

Alternative Names

Several provinces have alternative names (especially Basque and Catalan variants):
Standard NameAlternativeConstant
ÁlavaArabaALAVA / ARABA
La CoruñaA CoruñaLA_CORUNA / A_CORUNA
GuipúzcoaGipuzkoaGUIPUZCOA / GIPUZKOA
VizcayaBizkaiaVIZCAYA / BIZKAIA
GeronaGironaGERONA / GIRONA
LéridaLleidaLERIDA / LLEIDA
OrenseOurenseORENSE / OURENSE
Islas BalearesIlles BalearsISLAS_BALEARES / ILLES_BALEARS

Usage Examples

Basic Usage

from bormeparser.provincia import PROVINCIA

# Access province properties
madrid = PROVINCIA.MADRID
print(madrid.name)  # "Madrid"
print(madrid.code)  # "28"
print(str(madrid))  # "Madrid"

# Using alternative names
alava = PROVINCIA.ARABA  # Same as PROVINCIA.ALAVA
print(alava.code)  # "01"

Comparing Provinces

from bormeparser.provincia import PROVINCIA

# Object comparison
if PROVINCIA.MADRID == PROVINCIA.MADRID:
    print("Same province")

# String comparison (case-insensitive)
if PROVINCIA.MADRID == "madrid":
    print("Madrid province")

if PROVINCIA.BARCELONA == "BARCELONA":
    print("Barcelona province")

# Alphabetical ordering
provinces = [PROVINCIA.MADRID, PROVINCIA.BARCELONA, PROVINCIA.ALAVA]
provinces.sort()
for p in provinces:
    print(p.name)
# Output:
# Álava
# Barcelona
# Madrid

Download Files by Province

from bormeparser import download_pdfs
from bormeparser.provincia import PROVINCIA
import datetime

# Download all BORMEs for Madrid
date = datetime.date(2024, 1, 15)
success, files = download_pdfs(
    date=date,
    path="./borme_files",
    provincia=PROVINCIA.MADRID
)

print(f"Downloaded {len(files)} files for Madrid")

# Download for multiple provinces
for provincia in [PROVINCIA.MADRID, PROVINCIA.BARCELONA, PROVINCIA.VALENCIA]:
    success, files = download_pdfs(
        date=date,
        path=f"./borme_{provincia.code}",
        provincia=provincia
    )
    print(f"{provincia.name}: {len(files)} files")

Filter Companies by Province

from bormeparser import Borme
from bormeparser.provincia import PROVINCIA

# Parse BORME file
borme = Borme.from_json('borme-2024-01-15.json')

# Filter companies from specific provinces
madrid_companies = []
for company in borme.get_companies():
    if company.provincia == PROVINCIA.MADRID:
        madrid_companies.append(company)

print(f"Found {len(madrid_companies)} companies in Madrid")

# Count companies by province
from collections import Counter

province_counts = Counter(
    company.provincia for company in borme.get_companies()
)

for provincia, count in province_counts.most_common(5):
    print(f"{provincia.name}: {count} companies")

All Provinces List

from bormeparser.provincia import ALL_PROVINCIAS, PROVINCIA

# Get list of all province names
print(f"Total provinces: {len(ALL_PROVINCIAS)}")
print(ALL_PROVINCIAS[:5])
# ['ALAVA', 'ALBACETE', 'ALICANTE', 'ALMERIA', 'AVILA']

# Access all province objects
for provincia_name in ALL_PROVINCIAS:
    provincia = getattr(PROVINCIA, provincia_name)
    print(f"{provincia.code}: {provincia.name}")

Complete Example

from bormeparser import download_pdfs, Borme
from bormeparser.provincia import PROVINCIA, ALL_PROVINCIAS
from bormeparser.acto import ACTO
import datetime

# Download BORMEs for all provinces in a specific region
catalonia_provinces = [
    PROVINCIA.BARCELONA,
    PROVINCIA.GERONA,
    PROVINCIA.LERIDA,
    PROVINCIA.TARRAGONA
]

date = datetime.date(2024, 1, 15)

for provincia in catalonia_provinces:
    print(f"\nProcessing {provincia.name}...")
    
    success, files = download_pdfs(
        date=date,
        path=f"./catalonia/{provincia.code}",
        provincia=provincia
    )
    
    print(f"Downloaded {len(files)} files")
    
    # Parse and analyze
    for file in files:
        borme = Borme.from_file(file)
        
        # Count formations
        formations = sum(
            1 for company in borme.get_companies()
            if ACTO.CONSTITUCION in company.get_acts()
        )
        
        print(f"  {formations} new companies formed")

Province Codes Reference

Complete list of province codes:
CodeProvinceCodeProvince
01Álava27Lugo
02Albacete28Madrid
03Alicante29Málaga
04Almería30Murcia
05Ávila31Navarra
06Badajoz32Orense
07Islas Baleares33Asturias
08Barcelona34Palencia
09Burgos35Las Palmas
10Cáceres36Pontevedra
11Cádiz37Salamanca
12Castellón38Santa Cruz de Tenerife
13Ciudad Real39Cantabria
14Córdoba40Segovia
15La Coruña41Sevilla
16Cuenca42Soria
17Gerona43Tarragona
18Granada44Teruel
19Guadalajara45Toledo
20Guipúzcoa46Valencia
21Huelva47Valladolid
22Huesca48Vizcaya
23Jaén49Zamora
24León50Zaragoza
25Lérida51Ceuta
26La Rioja52Melilla

Build docs developers (and LLMs) love