我有一个名为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"
所以基本上现在我希望将所有输出组合成一组两个,以便我在操作系统上执行命令。
有什么方法可以将它们组合成两个组合?
答案 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
。我认为这是一个错误。
请注意,此代码取决于您输入的数据,正如您所描述的那样,并且没有任何错误检查。因此,如果输入的格式实际上比这更加可变,那么您将需要添加一些验证。