替换Python字符串中的字符

2024-05-16 03:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图清理一个本质上是我使用SQLAlchemy从teradatadb中提取的表定义的列表。我实际上是在尝试替换字符串中的\r字符

我已经尝试在for循环中使用replace函数,如下所示

import teradata
import sqlalchemy
import string


eng = sqlalchemy.create_engine('teradatasql:///?user=xxxx&       

# execute sql
query = 'SHOW TABLE DBADMIN_BKP.LIKP_BKP'
result = eng.execute(query)
results = result.fetchall()
results = [items.replace("\n", "") for items in results]

print (results)


Traceback (most recent call last):
File "SQL_ALCHEMY.py", line 12, in <module>
results = [items.str_replace("\n", "") for items in results]
File "SQL_ALCHEMY.py", line 12, in <listcomp>
results = [items.str_replace("\n", "") for items in results]
AttributeError: Could not locate column in row for column 'replace'

Tags: inimportforexecutesqlsqlalchemyitemsresult
2条回答

列表中包含的项是一个元组。你知道吗

如果打印结果[0],您将得到:

('CREATE MULTISET TABLE DBADMIN_BKP.LIKP_BKP ,NO FALLBACK ,\r NO BEFORE JOURNAL,\r NO AFTER JOURNAL,\r CHECKSUM = DEFAULT,\r DEFAULT ME ... (12819 characters truncated) ... HARACTER SET UNICODE CASESPECIFIC NOT NULL,\r FSH_VAS_CG CHAR(3) CHARACTER SET UNICODE CASESPECIFIC NOT NULL, \rPRIMARY KEY ( MANDT ,VBELN ))\r;',)

现在你已经说过你已经把它变成了一个字符串,我假设你是通过str(results[I])实现的。这将产生:

"('CREATE MULTISET TABLE DBADMIN_BKP.LIKP_BKP ,NO FALLBACK ,\\r NO BEFORE JOURNAL,\\r NO AFTER JOURNAL,\\r CHECKSUM = DEFAULT,\\r DEFAULT ME ... (12819 characters truncated) ... HARACTER SET UNICODE CASESPECIFIC NOT NULL,\\r FSH_VAS_CG CHAR(3) CHARACTER SET UNICODE CASESPECIFIC NOT NULL, \\rPRIMARY KEY ( MANDT ,VBELN ))\\r;',)"

当它被转换成一个字符串时,Python希望确保“\r”实际上会被打印出来,而不是转义序列“\r”的含义,转义序列是一个回车符。为了做到这一点,添加了另一个反斜杠,给出了转义序列“\\”,字面上表示单个“\”

>>> print("\\r")
\r
>>> print("\r")

>>> print("\\")
\
>>> print("\")
  File "<stdin>", line 1
    print("\")
             ^
SyntaxError: EOL while scanning string literal

所以要删除这个“\\r”字符,您需要正确地识别它。你知道吗

你的代码有一个简单的补丁可以让它正常工作。我很确定你只是在代码中误用了.replace()函数。以下是正确的代码:

import teradata
import sqlalchemy
import string


eng = sqlalchemy.create_engine('teradatasql:///?user=xxxx&')

# execute sql
query = 'SHOW TABLE DBADMIN_BKP.LIKP_BKP'
result = eng.execute(query)
results = result.fetchall()
results = results.replace("\n", "") #This is the segment of the code that was causing the error. 

print (results)

相关问题 更多 >