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

Slicing a python variable removes the whole string

我是 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切片有误?

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

不过,引号会出现,因为您正在处理字符串文字。 但是,一旦打印出来,引号就会消失。

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

在那种情况下,它只是:

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

您正在对代表每个检索到的行的元组进行切片,而不是对作为这些行的第一个(也是唯一一个)元素的字符串进行切片。此外,您不需要 "get rid of the quotes" - 这只是解释器尽力表示数据结构。

您的数据库returns 相当于下面的结构 - 元组列表。由于您只选择了一个字段,因此每个元组只包含一个元素。

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

看 - 没有引号!