切片python变量会删除整个字符串

时间:2016-08-02 16:45:27

标签: python substring slice cx-oracle

我是一个python新手,使用cx_Oracle python包来执行sql查询:

cursor.execute("select tablespace_name from user_tablespaces")

从oracle 11g数据库中检索列表。结果如下所示:

('SYSTEM',)
('SYSAUX',)
('UNDOTBS1',)
('TEMP',)
('USERS',)

我需要从每个条目中删除单引号和逗号,然后将其放入数组中,并尝试使用python切片来执行此操作:

tablespaceNames = []
for result in cursor:
    tablespaceNames.append(result[2:-3])

然而,这只是在我的数组中给我空字符串:

()
()
()
()

我从查询结果中得到的对象是问题,还是我使用python切片错了?

2 个答案:

答案 0 :(得分:2)

tableNameSpaces = [item [0][2:-3] for item in cursor]

引号将在,因为你正在处理字符串文字。 然而,一旦你打印出来,报价就会消失。

正如nicarus向我指出的那样,可能你根本不想截断你的字符串文字,尽管我认为这就是你想要的。

在这种情况下,它只是:

tableNameSpaces = [item [0] for item in cursor]

答案 1 :(得分:2)

您正在切割表示每个检索到的行的元组,而不是作为这些行的第一个(也是唯一的)元素的字符串。此外,您不需要“删除引号” - 这只是解释器尽力表示数据结构。

您的数据库返回以下结构的等效项 - 元组列表。由于您只选择了一个字段,因此每个元组只包含一个元素。

data = [
    ('SYSTEM',),
    ('SYSAUX',),
    ('UNDOTBS1',),
    ('TEMP',),
    ('USERS',)
]

首先让我们提取这些单个元素,给自己一个字符串列表,而不是元组列表。

sdata = [s[0] for s in data]
print(sdata)

您将看到的输出是

['SYSTEM', 'SYSAUX', 'UNDOTBS1', 'TEMP', 'USERS']

然后打印出元组中的每个字符串:

for s in sdata:
    print(s)

此代码的输出为

SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS

参见 - 没有引号!