107 lines
2.6 KiB
Python
107 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
股票代码格式化工具
|
|
根据股票代码自动判断市场并添加后缀 (SZ/SH/BJ)
|
|
"""
|
|
|
|
|
|
def get_stock_exchange(stock_code: str) -> str:
|
|
"""
|
|
根据股票代码判断所属交易所
|
|
|
|
Args:
|
|
stock_code: 纯数字股票代码,如 "000001", "600000"
|
|
|
|
Returns:
|
|
交易所缩写: "SZ" | "SH" | "BJ" | None
|
|
"""
|
|
if not stock_code or not stock_code.isdigit():
|
|
return None
|
|
|
|
code = stock_code.strip()
|
|
|
|
# 沪市 (SH)
|
|
# - 600, 601, 603, 605: 主板
|
|
# - 688, 689: 科创板
|
|
# - 900: B股
|
|
if code.startswith(('600', '601', '603', '605', '688', '689', '900')):
|
|
return "SH"
|
|
|
|
# 深市 (SZ)
|
|
# - 000, 001: 主板
|
|
# - 002, 003: 中小板/合并后主板
|
|
# - 300: 创业板
|
|
# - 200: B股
|
|
if code.startswith(('000', '001', '002', '003', '300', '200')):
|
|
return "SZ"
|
|
|
|
# 北交所 (BJ)
|
|
# - 8 开头: 43, 83, 87, 88 等
|
|
if code.startswith('8') or code.startswith('4'):
|
|
return "BJ"
|
|
|
|
return None
|
|
|
|
|
|
def format_stock_code(stock_code: str) -> str:
|
|
"""
|
|
将纯数字股票代码格式化为 代码.市场 格式
|
|
|
|
Args:
|
|
stock_code: 纯数字股票代码,如 "000001"
|
|
|
|
Returns:
|
|
格式化后的代码,如 "000001.SZ"
|
|
|
|
Raises:
|
|
ValueError: 无法识别市场时抛出
|
|
"""
|
|
code = stock_code.strip()
|
|
|
|
exchange = get_stock_exchange(code)
|
|
if exchange is None:
|
|
raise ValueError(f"无法识别的股票代码: {stock_code}")
|
|
|
|
return f"{code}.{exchange}"
|
|
|
|
|
|
def format_stock_codes(stock_codes: list[str]) -> list[str]:
|
|
"""
|
|
批量格式化股票代码
|
|
|
|
Args:
|
|
stock_codes: 股票代码列表
|
|
|
|
Returns:
|
|
格式化后的代码列表
|
|
"""
|
|
results = []
|
|
for code in stock_codes:
|
|
try:
|
|
formatted = format_stock_code(code)
|
|
results.append(formatted)
|
|
except ValueError as e:
|
|
results.append(f"ERROR: {e}")
|
|
return results
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# 测试示例
|
|
test_codes = [
|
|
"000001", # 平安银行 - 深市
|
|
"600000", # 浦发银行 - 沪市
|
|
"688981", # 中芯国际 - 沪市(科创板)
|
|
"300750", # 宁德时代 - 深市(创业板)
|
|
"835185", # 贝特瑞 - 北交所
|
|
"12345", # 无效代码
|
|
]
|
|
|
|
print("股票代码格式化测试:")
|
|
print("-" * 30)
|
|
for code in test_codes:
|
|
try:
|
|
result = format_stock_code(code)
|
|
print(f"{code} -> {result}")
|
|
except ValueError as e:
|
|
print(f"{code} -> {e}")
|