Tzu*_*hay 4 python string sqlobject
给定一个文件包含如下行:
(?i:\bsys\.user_catalog\b)
Run Code Online (Sandbox Code Playgroud)
在读取这些行时,我希望该值是一个原始字符串(未转义),这意味着,在内存中,行应该是
r'(?i:\bsys\.user_catalog\b)'
Run Code Online (Sandbox Code Playgroud)
代替
(?i:\bsys\.user_catalog\b)
Run Code Online (Sandbox Code Playgroud)
当传递给诸如sqlobject之类的lib时,它会被转义.
例如,使用sqlobject,如果我声明
Table(column=r'(?i:\bsys\.user_catalog\b)')
Run Code Online (Sandbox Code Playgroud)
如果我说的话,我会得到理想的结果
Table(column='(?i:\bsys\.user_catalog\b)')
Run Code Online (Sandbox Code Playgroud)
我不.
所以问题基本上是,当我不处于声明/赋值模式(例如a = r'string')时,我可以传递原始字符串,而不是字符串已经在内存中.
原始字符串表示法仅用于Python源代码; 声明为原始字符串的所有字符串都被"转换"为普通字符串,并在"编译时"期间添加了必要的转义序列(与(在Python 2中)两种不同的字符串类型字符串/ Unicode字符串不同):
>>> r"\b"
'\\b'
>>> "Hello"
'Hello'
>>> u"Hello"
u'Hello'
Run Code Online (Sandbox Code Playgroud)
如果您从文件中读取字符串,则它已经被正确转义.
(假设test.txt包含(?i:\bsys\.user_catalog\b)):
f = open("test.txt").read()
print f
print repr(f)
Run Code Online (Sandbox Code Playgroud)
输出:
(?i:\bsys\.user_catalog\b)
'(?i:\\bsys\\.user_catalog\\b)'
Run Code Online (Sandbox Code Playgroud)