拆分要插入数据库的字符串

2024-09-28 21:13:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件有很多这样的行。你知道吗

Jul 15 12:12:51 whitelist logger: 1|999999999999|id:d9faff7c-4016-4343-b494-37028763bb66 submit date:1307130919 done date:1307130919 stat:DELIVRD err:0|L_VB3_NM_K_P|1373687445|vivnel2|L_VB3_GH_K_P|promo_camp1-bd153424349bc647|1

我需要在数据库中插入值,因此我需要分离这些值。你知道吗

1) logger
2) submit date
3) done date
4) stat
5) err

下面是隔离记录器字符串的步骤。你知道吗

tail  messages | grep logger: | awk -F'logger: ' '{print $2}' | awk '{print $1}'

这是划分字符串的正确方法吗? 有更好的选择吗?你知道吗


Tags: 字符串iddateloggerjulstaterrsubmit
2条回答

在Python中有许多方法可以实现这一点。一种简单的方法是使用Python的内置正则表达式。假设日志输出始终遵循上述规则,您可以提取如下感兴趣的部分:

import re

s = "Jul 15 12:12:51 whitelist logger: 1|999999999999|id:d9faff7c-4016-4343-b494-37028763bb66 submit date:1307130919 done date:1307130919 stat:DELIVRD err:0|L_VB3_NM_K_P|1373687445|vivnel2|L_VB3_GH_K_P|promo_camp1-bd153424349bc647|1"

logger_re = re.compile(
"logger: ([^ ]+)\
 submit date:(\d+)\
 done date:(\d+)\
 stat:(.+)\
 err:(.+)$")

print logger_re.search(s).groups()

groups()方法返回在()括号中找到的字符串的元组。你知道吗

http://docs.python.org/2/library/re.html

如果将关键字放入文件中,这将起作用:GNU的代码: 你知道吗

 sed -nr 's#.*#h;s/.*(&):\\s*(\\w+).*/\\1:\\2/p;g#p' file2|sed -nrf - file1

示例:

$ cat file1
Jul 15 12:12:51 whitelist logger: 1|999999999999|id:d9faff7c-4016-4343-b494-37028763bb66 submit date:1307130919 done date:1307130919 stat:DELIVRD err:0|L_VB3_NM_K_P|1373687445|vivnel2|L_VB3_GH_K_P|promo_camp1-bd153424349bc647|1

$ cat file2
logger
submit date
done date
stat
err

$ sed -nr 's#.*#h;s/.*(&):\\s*(\\w+).*/\\1:\\2/p;g#p' file2|sed -nrf - file1
logger:1
submit date:1307130919
done date:1307130919
stat:DELIVRD
err:0

相关问题 更多 >