格式化文本,行到python中的列

时间:2014-12-26 23:38:47

标签: python database text row

我需要更改文本文件的格式,输入文本包含几个以event code开头的块。在每个块中有几行,每行包含一个或多个参数,我需要的是每个事件代码都是ROW的输出,并且与该块相关的所有参数都将在列中,如电子表格或数据库。
这是一个块的示例,可以看出事件名称为internal-soho-missing-call,参数为hourminute,... ue-contextrnv-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

1 个答案:

答案 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

希望这有帮助。