Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python原始字符串赋值_Python_String_Sqlobject - Fatal编程技术网

python原始字符串赋值

python原始字符串赋值,python,string,sqlobject,Python,String,Sqlobject,给定文件包含以下行: (?i:\bsys\.user_catalog\b) 在读取这些行时,我希望值是一个原始字符串(unscaped),这意味着在内存中,行应该是 r'(?i:\bsys\.user_catalog\b)' 而不是 (?i:\bsys\.user_catalog\b) 它在传递给libs(如sqlobject)时被转义 例如,如果我声明 Table(column=r'(?i:\bsys\.user_catalog\b)') Table(column='(?i:\bsys

给定文件包含以下行:

(?i:\bsys\.user_catalog\b)
在读取这些行时,我希望值是一个原始字符串(unscaped),这意味着在内存中,行应该是

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

(?i:\bsys\.user_catalog\b)
它在传递给libs(如sqlobject)时被转义

例如,如果我声明

Table(column=r'(?i:\bsys\.user_catalog\b)')
Table(column='(?i:\bsys\.user_catalog\b)')
如果我声明

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


所以问题基本上是,当我不处于声明/赋值模式时(例如,
a=r'string'
),我可以传递一个原始字符串,而该字符串已经在内存中了。

您可以在任何使用字符串的地方使用原始字符串。当您有许多转义字符时,原始字符串只是表示字符串的一种用户友好的方式


第二种情况不起作用,因为
“\”
。因此,您需要使用另一个
'\'
来转义它。如果您给出
”(?i:\\bsys\\.user\u catalog\\b)
,则第二种情况应该有效。在内存中,因为存储了ASCII或Unicode,所以它是否为原始字符串没有任何区别。

原始字符串表示法仅在Python源代码中使用;声明为原始字符串的所有字符串都“转换”为普通字符串,并在“编译时”添加了必要的转义序列(与(Python 2中)两种不同的字符串类型string/Unicode字符串不同):


如果从文件中读取字符串,则该字符串已被正确转义

(假设
test.txt
包含
(?i:\bsys\.user\u catalog\b)
):

输出:

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

你想得不对。没有“原始字符串”类型,只有“字符串”。在引号前写入
r
,只会告诉python如何解释以下字符串


这仍然对我没有帮助,因为我需要将原始字符串传递给sqlobject。没有“原始字符串类型”这样的东西可以传递。正如M S正确指出的那样,它们是纯粹的语法糖,为程序员提供了方便。“如果您从文件中读取字符串,它已经被正确转义了。”这有点误导;更准确地说,“转义”的概念不适用于字符串对象,而仅适用于字符串文本。如果从文件中读取一个反斜杠,则会得到一个包含一个反斜杠的字符串。如果你写
“\\”
,你会得到一个有一个反斜杠的字符串。转义只发生在源代码中,因此有一种明确的方法来说明字符串的一部分是什么,以及代码的其余部分是什么。一旦字符串对象被创建,这已经很清楚了;它们是创建相同类型对象的另一种语法。@KarlKnechtel:谢谢您的澄清。我希望我可以这样写:)Python2仍然是python