Search code examples
pythonstringsqlobject

python raw string assignment


Given a file contains lines such as:

(?i:\bsys\.user_catalog\b)

While reading those line, I want the value to be a raw string (unescaped), meaning, in memory, line should be

r'(?i:\bsys\.user_catalog\b)'

instead of

(?i:\bsys\.user_catalog\b)

Which is escaped when passed over to libs such as sqlobject.

For instance, with sqlobject, if I state

Table(column=r'(?i:\bsys\.user_catalog\b)')

I get the desired results while if I state

Table(column='(?i:\bsys\.user_catalog\b)')

I do not.

So question is basically, I can I pass a raw string when I am not in declarative/assignment mode (e.g. a = r'string'), rather, the string is already in memory.


Solution

  • The raw string notation is only used in Python source code; all strings declared as raw strings are "converted" to normal strings with the necessary escape sequences added during "compile time" (unlike (in Python 2) the two different string types string/Unicode string):

    >>> r"\b"
    '\\b'
    >>> "Hello"
    'Hello' 
    >>> u"Hello"
    u'Hello'
    

    If you read the string from a file, it will already be correctly escaped.

    (Assuming test.txt contains (?i:\bsys\.user_catalog\b)):

    f = open("test.txt").read()
    print f
    print repr(f)
    

    Output:

    (?i:\bsys\.user_catalog\b)
    '(?i:\\bsys\\.user_catalog\\b)'