123 lines
3.5 KiB
Python
123 lines
3.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Created on 2021-12-13 16:29:25
|
|
---------
|
|
@summary: 股票代码 code 格式化
|
|
---------
|
|
@author: yangyx01
|
|
"""
|
|
import re
|
|
|
|
|
|
def format_stock_code(x, special=""):
|
|
"""
|
|
股票代码 code 格式化
|
|
@param x:
|
|
@param special:
|
|
@return:
|
|
"""
|
|
x = str(x)
|
|
x = "".join(filter(str.isdigit, x))
|
|
|
|
stock_len = 6
|
|
hk_stock_len = 5
|
|
if special:
|
|
x = str(x)
|
|
if "行业" in special or "概念" in special:
|
|
x = x.zfill(stock_len) if len(x) < stock_len else x
|
|
return '%s.TI' % x
|
|
elif special == "港股":
|
|
r = re.search(r"(\d+)", str(x), re.S | re.M)
|
|
if not r:
|
|
return x
|
|
else:
|
|
x = r.group(1)
|
|
x = x.zfill(hk_stock_len) if len(x) < hk_stock_len else x
|
|
return '%s.HK' % x
|
|
elif special == "场外基金" or special == "热基":
|
|
x = x.zfill(stock_len) if len(x) < stock_len else x
|
|
return '%s.OF' % x
|
|
elif special == "可转债":
|
|
if str(x).startswith('11'):
|
|
x = x.zfill(stock_len) if len(x) < stock_len else x
|
|
return '%s.SH' % x
|
|
elif str(x).startswith('12'):
|
|
x = x.zfill(stock_len) if len(x) < stock_len else x
|
|
return '%s.SZ' % x
|
|
if not x[0].isdigit():
|
|
return x.upper()
|
|
if str(x[0:3]) in ['920'] or str(x[0]) in ['8', '4']:
|
|
x = x.zfill(stock_len) if len(x) < stock_len else x
|
|
return '%s.BJ' % x
|
|
if str(x[0]) in ['5', '6'] or str(x[0:3]) in ['900']:
|
|
x = x.zfill(stock_len) if len(x) < stock_len else x
|
|
return '%s.SH' % x
|
|
else:
|
|
x = x.zfill(stock_len) if len(x) < stock_len else x
|
|
return '%s.SZ' % x
|
|
|
|
def a_symbol_verify(x):
|
|
l = str(x).upper().split(".")
|
|
if not x[-1].isdigit():
|
|
return True
|
|
elif len(l) == 2:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
|
|
def symbol_verify(x):
|
|
ss = x.split(",")
|
|
if len(ss) > 1:
|
|
if a_symbol_verify(ss[0]):
|
|
return x
|
|
else:
|
|
raise '请按照 "000001.SZ,000001.SZ,000001.SZ" 格式传入symbol'
|
|
else:
|
|
if a_symbol_verify(x):
|
|
return x
|
|
else:
|
|
raise '请按照 "000001.SZ" 格式传入symbol'
|
|
|
|
|
|
def verify_stock_or_index(x):
|
|
"""
|
|
判断代码是否是 股票 True 指数 False
|
|
@param x:
|
|
@return:
|
|
"""
|
|
x = str(x).upper()
|
|
if x.startswith('39') and x.endswith('SZ'):
|
|
return True
|
|
elif x.startswith('30') and x.endswith('SZ'):
|
|
return True
|
|
elif x.startswith('0') and x.endswith('SH'):
|
|
return False
|
|
elif x.startswith('0') and x.endswith('SZ'):
|
|
return True
|
|
elif x.endswith("SH"):
|
|
return False
|
|
# elif x.startswith('6') and x.endswith('SH'):
|
|
# return True
|
|
elif x.startswith('8') and x.endswith('BJ'):
|
|
return True
|
|
elif x.startswith('4') and x.endswith('BJ'):
|
|
return True
|
|
elif x.startswith('920') and x.endswith('BJ'):
|
|
return True
|
|
elif x.startswith('9') and x.endswith('CSI'):
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
|
|
if __name__ == '__main__':
|
|
# s = symbol_verify("13.SH")
|
|
# # s = symbol_verify("sh13")
|
|
# s = symbol_verify("sz000001")
|
|
# s = symbol_verify("000001.SZ")
|
|
# s = symbols_f("000001", special="港股")
|
|
# s = verify_stock_or_index(x="399005.SZ")
|
|
s = format_stock_code(x="sz92052")
|
|
print(s)
|