我需要更改文本文件的格式,输入文本包含几个以event code
开头的块。在每个块中有几行,每行包含一个或多个参数,我需要的是每个事件代码都是ROW
的输出,并且与该块相关的所有参数都将在列中,如电子表格或数据库。
这是一个块的示例,可以看出事件名称为internal-soho-missing-call
,参数为hour
,minute
,... ue-context
,rnv-id-1
,....
我的问题是使用python执行此操作的最佳方法是什么(操作系统是Solaris 10)?我应该使用数据库吗?哪个数据库与python一起正常工作?我预期的行数最多为1000,最大列数为30.考虑到安装新包和数据库的限制,因为我不是系统管理员,有没有办法只使用python默认包?
scannerId '00000000 00000000 00000001'B,
hour 7,
minute 4,
second 38,
millisec 238,
events internal-soho-ds-missing-call :
{
ue-context valid : 3045,
rnv-module-id valid : 22,
c-id-1 valid : 12623,
rnv-id-1 valid : 2,
event-trigger valid : event-value-event-1a (15),
action valid : event-value-no-action (11),
scrambling-code-cell-1 valid : 446,
cpoid-ec-no-cell-1 valid : 29,
rsdd-cell-1 valid : 12,
scrambling-code-trigger-cell valid : 2,
cpoid-ec-no-trigger-cell valid : 23,
rsdd-trigger-cell valid : 9,
}
我想要的输出如下:
EVENT hour minute second millisec ue-context rnv-module-id ...
events internal-soho-ds-missing-call 7 4 38 238 3045 22
答案 0 :(得分:0)
我假设您已将以下内容存储在file:key_Value.txt
中scannerId '00000000 00000000 00000001'B,
hour 7,
minute 4,
second 38,
millisec 238,
events internal-soho-ds-missing-call :
{
ue-context valid : 3045,
rnv-module-id valid : 22,
c-id-1 valid : 12623,
rnv-id-1 valid : 2,
event-trigger valid : event-value-event-1a (15),
action valid : event-value-no-action (11),
scrambling-code-cell-1 valid : 446,
cpoid-ec-no-cell-1 valid : 29,
rsdd-cell-1 valid : 12,
scrambling-code-trigger-cell valid : 2,
cpoid-ec-no-trigger-cell valid : 23,
rsdd-trigger-cell valid : 9,
}
这可以解决你的问题:
import string
intermediate=""
with open("key_Value.txt", 'r') as fin:
for line in fin:
intermediate+=line.strip() + "\n"
i = intermediate.splitlines()
heading = []
values = []
splitstring = " "
for s in i:
if "{" in s:
splitstring = " : "
if not (("{" in s) or ("}" in s)):
try:
s=string.replace(s,",","")
key = s.split(splitstring,1)
key[1]=string.replace(key[1]," : ","")
key[1]=string.replace(key[1]," :","")
heading.append(key[0])
values.append(key[1])
except:
pass
head=""
for h in heading:
head+=h+"\t"
val=""
for v in values:
val+=v+"\t"
print head
print val
希望这有帮助。