如何从文件

时间:2017-06-24 15:55:30

标签: python python-2.7

我有一个名为sample.txt的文件,如下所示

ServiceProfile.SharediFCList[1].DefaultHandling=1
ServiceProfile.SharediFCList[1].ServiceInformation=
ServiceProfile.SharediFCList[1].IncludeRegisterRequest=n
ServiceProfile.SharediFCList[1].IncludeRegisterResponse=n

这里我的要求是删除括号和整数,并用

输入os命令
ServiceProfile.SharediFCList.DefaultHandling=1
ServiceProfile.SharediFCList.ServiceInformation=
ServiceProfile.SharediFCList.IncludeRegisterRequest=n
ServiceProfile.SharediFCList.IncludeRegisterResponse=n 

我是Python的新手。这是我的第一次尝试。我已使用这些代码删除括号:

#!/usr/bin/python
import re
import os
import sys
f = os.open("sample.txt", os.O_RDWR)
ret = os.read(f, 10000)
os.close(f)
print ret
var1 = re.sub("[\(\[].*?[\)\]]", "", ret)
print var1f = open("removed.cfg", "w+")
f.write(var1)
f.close()

在使用该文件作为输入后,我想形成如下所示的特定于应用程序的命令:

cmcli INS  "DefaultHandling=1 ServiceInformation="

,下一个设为

cmcli INS "IncludeRegisterRequest=n IncludeRegisterRequest=y"

所以基本上现在我希望将所有输​​出组合成一组两个,以便我在操作系统上执行命令。

有什么方法可以将它们组合成两个组合?

1 个答案:

答案 0 :(得分:0)

当您的文件是面向行的文本时,读取10,000个字节的文本实际上是不必要的,并且也不可扩展。您需要有充分的理由使用os.open()代替open()

因此,将您的数据视为文本行,并且每两行组成一行输出。

from __future__ import print_function
import re

command = [None,None]
cmd_id = 1
bracket_re = re.compile(r".+\[\d\]\.(.+)")
# This doesn't just remove the brackets: what you actually seem to want is 
# to pick out everything after [1]. and ignore the rest.

with open("removed_cfg","w") as outfile:
    with open("sample.txt") as infile:
        for line in infile:
            m = bracket_re.match(line)
            cmd_id = 1 - cmd_id  # gives 0, 1, 0, 1
            command[cmd_id] = m.group(1)

            if cmd_id == 1: # we have a pair
                output_line = """cmcli INS "{0} {1}" """.format(*command)
                print (output_line, file=outfile)

这给出了输出

cmcli INS "DefaultHandling=1 ServiceInformation=" 
cmcli INS "IncludeRegisterRequest=n IncludeRegisterResponse=n" 

第二行与您的示例输出不对应。我不知道输入IncludeRegisterResponse=n应该如何成为输出IncludeRegisterRequest=y。我认为这是一个错误。

请注意,此代码取决于您输入的数据,正如您所描述的那样,并且没有任何错误检查。因此,如果输入的格式实际上比这更加可变,那么您将需要添加一些验证。