Python 如何将数据输入到输出的(括号)中
我已打印输出,例如:Python 如何将数据输入到输出的(括号)中,python,sqlite,Python,Sqlite,我已打印输出,例如: enable configure terminal interface fa(fanumber)/(fanumber) ip adress (ip) (subnet mask) no shutdown 我想在所有括号中输入新数据: 在我的例子中,这些是: (fanumber)/(fanumber) (ip) (subnet mask) 我需要在当前函数中编写更多代码还是编写新函数 我该怎么做 我目前的职能是: def readciscodevice(function,
enable
configure terminal
interface fa(fanumber)/(fanumber)
ip adress (ip) (subnet mask)
no shutdown
我想在所有括号中输入新数据:
在我的例子中,这些是:
(fanumber)/(fanumber)
(ip) (subnet mask)
我需要在当前函数中编写更多代码还是编写新函数
我该怎么做
我目前的职能是:
def readciscodevice(function, device):
conn = sqlite3.connect('server.db')
cur = conn.cursor()
if device == "switch":
cur.execute(
"SELECT DISTINCT command FROM switch WHERE function =? or function='configure terminal' or function='enable' ORDER BY key ASC",
(function,))
read = cur.fetchall()
return read
elif device == "router":
cur.execute(
"SELECT DISTINCT command FROM router WHERE function =? or function='configure terminal' or function='enable' ORDER BY key ASC",
(function,))
read = cur.fetchall()
return read;
elif device == "showcommand":
cur.execute(
"SELECT DISTINCT command FROM showcommand WHERE function =? or function='enable' ORDER BY key ASC",
(function,))
read = cur.fetchall()
return read;
a = input("function:")
b = input("device:")
for result in readciscodevice(a,b):
print(result[0])
我不是要求你重写我的函数。我只是想寻求帮助来解决括号()问题
多谢各位
更新:
我是否需要使用replace()来执行我的函数
更多更新:
也许我没有把我的问题解释清楚。我想将我的数据重新输入到我的输出中,使其来自:
interface fa(fanumber)/(fanumber)
ip adress (ip) (subnet mask)
进入
不确定我是否完全理解您的问题,但要在括号之间的文本中找到任何内容,您可以尝试以下方法:
import re
p = re.compile('\(.*?\)')
iterator = p.finditer('I (want) to (capture) some (words) in (parenthesis)')
for match in iterator:
print(match.group())
输出:
(want)
(capture)
(words)
(parenthesis)
但是请注意,一旦括号中的单词可以嵌套(例如“some(words in(括号中的单词)),这将无法很好地工作。此外,它不会捕获示例中的除法字符。我猜你必须编写一些异常/一个更复杂的正则表达式来捕获一些数学运算符
更新:
iterator = p.finditer(s)
for match in iterator:
s = s[:match.start()] + [match.start():match.end()].replace(match.group(), dict[match.group()]) + s[match.end()]
@谢谢你的建议!也许我没有把我的话解释清楚。我想在接口fa(fanumber)/(fanumber)ip地址(ip)(子网掩码)中重新输入数据,并将结果设置为fa0/1 ip地址192.168.1.1(啊,oke。在这种情况下,我假设您有一个字典将“子网掩码”映射到255.255.255.0(以及ip地址的一些键,等等)。在迭代器中找到的匹配也有开始和结束,所以我会尝试类似的方法(没有测试过,如果有管理员可以告诉我如何在注释中正确显示代码,那就太好了!)迭代器=p.finditer(s);对于迭代器中的匹配:s=s[:match.start()]+s[match.start():match.end()]。替换(match.group(),dict[match.group()])+s[match.end()]谢谢;再次更新。再次查看,我怀疑这可能不是您想要的,它可能只会替换在迭代器中找到的最后一个匹配项。但是,如果我要解决您的问题,我至少会按照以下几行操作。@lgor我将再次更新,因为我无法运行您的代码,因为我遇到了以下问题,现在我正在尝试解决这些问题我也需要。当前在/之前和之后被称为“fanumber”的值是两个不同的值…例如:fa0/1、fa1/1或fa1/24。此外,“address”需要拼写为“address”,否则命令将失败。
iterator = p.finditer(s)
for match in iterator:
s = s[:match.start()] + [match.start():match.end()].replace(match.group(), dict[match.group()]) + s[match.end()]