Python 将 UUID 从字符串转换
我有一个文本文件,里面包含了一些UUID,格式大概是这样的:
A4AB4CD2-016B-411E-8BA1-0000C592BF17
当我用Python来解析和打印这个文件时,大部分(但不是全部)UUID看起来像这样:
12:40:54:457
每一行我需要解析的内容有三部分:一个数字、一个日期,还有这个UUID。前两部分都能正常工作。相关的代码行是:
for line in fileLines:
parts = line.split()
# Parse first two chunks
outputFile.write(""" WHERE tableID = '""" + uuid.UUID(parts[2]) + """'""")
这个过程失败了,因为UUID的格式已经是12:40:54:547这样的样子,但我不知道这种UUID的子类型叫什么,更不知道该怎么正确解析它。我的目标只是想把UUID原样读取进来,然后加上一些额外的文字,再打印出来,这样我就可以把它当作SQL脚本来运行。
我使用的是Python 3.3.2版本。
一整行的输入看起来是这样的:
339.00 2013-06-18 12:40:54.457 A4AB4CD2-016B-411E-8BA1-0000C592BF17
2 个回答
string.split() 是个很神奇的东西,你不需要指定分隔符,它会自动帮你分开。
比如说,有一段文字: "339.00 2013-06-18 12:40:54.457 A4AB4CD2-016B-411E-8BA1-0000C592BF17"
用 part.split() 或者 part.split(" ") 都可以达到同样的效果。
结果会是这样的: ['339.00', '2013-06-18', '12:40:54.457', 'A4AB4CD2-016B-411E-8BA1-0000C592BF17']
或者是这样: ['339.00', '', '2013-06-18', '12:40:54.457', 'A4AB4CD2-016B-411E-8BA1-0000C592BF17']
我个人建议用 str(part.split()[-1])。
关于 UUID 的使用,在转换成 UUID 时要用字符串转换,下面有参考示例。(否则可能会出问题)
uuid.UUID("A4AB4CD2-016B-411E-8BA1-0000C592BF17")
结果是: UUID('a4ab4cd2-016b-411e-8ba1-0000c592bf17')
str(uuid.UUID("A4AB4CD2-016B-411E-8BA1-0000C592BF17"))
结果是: 'a4ab4cd2-016b-411e-8ba1-0000c592bf17'
所以可以这样做。
比如说,遍历文件中的每一行:
parts = line.split()
# Parse first two chunks
outputFile.write(""" WHERE tableID = '""" + str(uuid.UUID(parts[-1])) + """'""")
如果UUID总是出现在最后,可以用[-1]来访问它。
outputFile.write(""" WHERE tableID = '""" + uuid.UUID(parts[-1]) + """'""")
在你给的例子中,parts[2]总是会返回时间。如果你的数据格式是固定的,可以用parts[2]来获取时间,但如果UUID前面的数据不太一样,最好总是选择分割后最后一个元素。