如何在python代码中删除元组中的空格



我有一个连接到oracle数据库的python代码,通过使用select返回数据并将数据保存在文件中我需要删除此保存数据中的空格这是我的代码

import cx_Oracle
conn_str = u'login/password@ip/user'
conn = cx_Oracle.connect(conn_str)
c = conn.cursor()
c.execute(u"SELECT * FROM subs_histories WHERE subs_subs_id IN (SELECT subs_subs_id FROM subs_histories where end_date < start_date GROUP BY subs_subs_id HAVING COUNT(*) > 1)  ORDER BY subs_subs_id, start_date, end_date")
with open('subs_histories.cvs', 'w', encoding="utf8") as f:
for row in c:
print(row[0],";", row[1],";", row[2],";", row[3],";", row[4],";", row[5], file=f)
conn.close()

在将其写入文本文件之前,您可以使用map函数在每个元组元素上运行rstrip和lstrip

将示例文本转换回元组(在您的情况下,您只需使用row(

d1 = "10065 ; 13 ; 1195 ; 2019-01-30 17:32:59 ; 2019-01-31 11:52:57 ; CC:OAPI:boris"
d2 = tuple(d1.split(';'))

这给了我们一个仍然包含空间的元组

('10065 ', ' 13 ', ' 1195 ', ' 2019-01-30 17:32:59 ', ' 2019-01-31 11:52:57 ', ' CC:OAPI:boris')

要删除空格,请执行以下操作。

no_spaces = tuple(map(lambda x: x.rstrip().lstrip(), d2))

这意味着,对于d2中的每个元素,运行匿名/lambda函数来删除文本左右两侧的空格,并将每个值放回元组中。

中的结果

('10065', '13', '1195', '2019-01-30 17:32:59', '2019-01-31 11:52:57', 'CC:OAPI:boris')

正如评论中所说,您可以使用csv编写器将数据输出为csv文件(但将分隔符指定为分号(,但这不是您的问题。

修改您的原始示例(我没有运行oracle,所以这只是猜测(

import cx_Oracle
conn_str = u'login/password@ip/user'
conn = cx_Oracle.connect(conn_str)
c = conn.cursor()
c.execute(u"SELECT * FROM subs_histories WHERE subs_subs_id IN (SELECT subs_subs_id FROM subs_histories where end_date < start_date GROUP BY subs_subs_id HAVING COUNT(*) > 1)  ORDER BY subs_subs_id, start_date, end_date")
with open('subs_histories.cvs', 'w', encoding="utf8") as f:
for row in c:
row = tuple(map(lambda x: x.rstrip().lstrip(), row))
print(row[0],";", row[1],";", row[2],";", row[3],";", row[4],";", row[5], file=f)
conn.close()

您报告了一个问题,即某些值不是字符串,因此无法使用lstriprstrip。如果lambda函数是字符串,则可以将其更改为仅尝试剥离空格,否则只输出值。有关可能的解决方案,请参见下文。

row = tuple(map(lambda x: x.rstrip().lstrip() if isinstance(x,str) else x, row))

另一种选择(更狡猾(

row = tuple(map(lambda x: str(x).rstrip().lstrip(), row))

最新更新