我有一些我为我工作的评估员办公室编写的 Python 脚本。其中大多数要求输入包裹 ID 号(然后用于通过 odbc 获取某些数据)。他们在输入包裹 ID 的方式上并不一致。
所以这是我的问题,他们以 3 种方式之一输入包裹 ID:
1:'1005191000060'
2:'001005191000060'
3:'0010-05-19-100-006-0'
第三种方式是正确的方式,所以我需要确保输入是固定的以始终匹配该格式。当然,他们宁愿使用前两种方式之一输入 ID。包裹号码必须始终为 15 位数字(20 位带破折号)
我目前有一个关于如何修复包裹 ID 的工作方法,但它非常难看。我想知道是否有人知道更好的方法(或更“Pythonic”的方法)。我有一个通常会导入所有这些脚本的函数。这是我所拥有的:
import re
def FormatPID(in_pid):
pid_format = re.compile('\d{4}-\d{2}-\d{2}-\d{3}-\d{3}-\d{1}')
pid = in_pid.zfill(15)
if not pid_format.match(pid):
fixed_pid = '-'.join([pid[:4],pid[4:6],pid[6:8],pid[8:11],pid[11:-1],pid[-1]])
return fixed_pid
else:
return pid
if __name__ == '__main__':
pid = '1005191000060'
## pid = '001005191000060'
## pid = '0010-05-19-100-006-0'
# test
t = FormatPID(pid)
print t
这确实工作得很好,但是我已经被这个丑陋的代码困扰了一段时间,我认为必须有比切片更好的方法。我希望有一种方法可以“强制”将其转换为字符串以匹配“pid_format”变量。有任何想法吗?我在正则表达式模块中找不到任何东西