Python函数打印两次,我需要删除符号

时间:2015-02-09 16:41:32

标签: python sqlite

对于我的函数,我想访问一个数据库,并从搜索命令函数中获取命令。

这是我的代码:

x="create vlan"
y="global"

def readswitch(x,y):

    conn = sqlite3.connect('server.db')
    with conn:
        cur = conn.cursor()
        run= cur.execute("SELECT command FROM switch WHERE   function =? or type = ?  ORDER BY key ASC",(x,y))
        read = cur.fetchall()
        return read;

import database
print (database.readswitch(x,y))

现在,我可以打印出我的答案,但结果上有一些错误如图所示:

C:\Python34\python.exe C:/Users/Username/PycharmProjects/2015122/database.py
[('enable',), ('configure terminal',), ('vlan (number)',), ('name (vlan name)',)]
[('enable',), ('configure terminal',), ('vlan (number)',), ('name (vlan name)',)]

Process finished with exit code 0

有三个错误,我不需要它,但我不知道如何修复

  1. 我打印出两次答案,但我不明白为什么打印两次。

  2. 我希望我的答案应按以下顺序打印:

  3. enable
    conf t
    vlan (number)
    name (vlan name)
    

    但它会连续打印。

    1. 我想删除以下符号:
    2.   

      [(' enable',),(' configure terminal',),(' vlan(number)',),'名称   (vlan name)',)]

      enable
      conf t
      vlan (number)
      name (vlan name)
      

      有人能为我的功能提供一些建议吗? 我希望你能改进我的功能。谢谢。

1 个答案:

答案 0 :(得分:0)

首先让我们解决结果打印两次的原因。

您有一个模块database.py。它包含行

import database
print (database.readswitch(x,y))

然后使用

从命令行执行模块
$ python database.py

在使用print到达该行之前,您需要导入database模块。这会导致模块的代码第二次执行。这意味着print正在执行两次。

要解决此问题,请不要从模块中导入模块,只需使用

print (readswitch(x,y))

为了更加安全,您可以将其放在条件中。

if __name__ == '__main__':
    print (readswitch(x,y))

现在我们可以解决您的输出格式。

fetchall方法产生list。当您打印整个列表时,它会将列表的内容打印为连续字符串。

>>> print([1, 2, 3, 'a', 'b', 'c'])
[1, 2, 3, 'a', 'b', 'c']

如果要格式化输出,则需要自己处理。最简单的方法是使用循环。

for command in readswitch(x, y):
    print(command[0])

您也可以使用str.join

print('\n'.join(command[0] for command in readswitch(x, y))